我的“远足”数据库中有两个表,假设表1被称为“森林”,表2被称为“山”。这两个表都有一个FOREIGN KEY "Trip_id“,它是表"Trip”(或者,这是一个虚构的例子)中的一个PRIMARY KEY,它是AUTO_INCREMENT。一次旅行既可以是山也可以是林,因此这两个表不共享任何Trip_ids。
我想根据Trip_id为某个值(比方说74)对森林或山脉执行SELECT * FROM操作。
SELECT * FROM FOREST OR MOUNTAIN WHERE Trip_id = 74 EXISTS; (我知道这段代码是垃圾和完全错误的,但我希望它有助于阐明我的目标)。
发布于 2016-03-18 03:12:11
假设它们具有相同的列,则使用union all
select m.*
from mountains m
where m.trip_id = 74
union all
select f.*
from forests f
where f.trip_id = 74;发布于 2016-03-18 03:08:11
SELECT Forest.Trip_id, Hikes.Trip_id
FROM Forest, Hikes
WHERE Forest.Trip_id OR Hikes.Trip_id = 74; http://sqlfiddle.com/#!9/f8c9e7/1
发布于 2016-03-18 03:11:31
最好的办法是将您的所有位置(或实际DB中的任何情况)都放在一个表中,其中包含一个类型代码。如果它们是异构对象,那么您可以使用这样一种模式,即具有单个共享表的每个类型具有1:1关系的各个表。例如,Destinations (包含在山脉和森林之间共享的数据),在Hikes表中有一个destination_id,然后是Mountains (包含特定于山脉的数据)和Forests的表,每个表都有一个destination_id,这也是它的主键。
除此之外,你可以这样做:
SELECT
H.name,
CASE
WHEN M.mountain_id IS NOT NULL THEN M.name
WHEN F.forest_id IS NOT NULL THEN F.name
ELSE NULL
END AS destination_name
FROM
Hikes H
LEFT OUTER JOIN Mountains M ON M.mountain_id = H.destination_id
LEFT OUTER JOIN Forests F ON F.forest_id = H.destination_id
WHERE
H.destination_id = 74但是,根据我的经验,您将继续遇到这种结构的问题。
https://stackoverflow.com/questions/36069463
复制相似问题