在两个表之间如何选择一个特定值的id存在于mysql的表

时间:2016-03-17 19:01:43

标签: mysql sql database

我在"徒步旅行"数据库让我们说表1被称为" Forest"和表2被称为" Mountain"。两个表都有FOREIGN KEY" Trip_id"这是表中的PRIMARY KEY" Trip" (或其他东西,这是一个组成的例子),AUTO_INCREMENT。旅行可以是Mountain或Forest,因此2个表不共享任何Trip_ids。

我想要SELECT * FROM森林或山区,具体取决于哪一个具有某个值的Trip_id(假设为74)。

SELECT * FROM FOREST OR MOUNTAIN WHERE Trip_id = 74 EXISTS; 

(我知道这段代码是垃圾,完全错了,但我希望它有助于说明我的目标)。

3 个答案:

答案 0 :(得分:2)

假设它们具有相同的列,请使用union all

select m.*
from mountains m
where m.trip_id = 74
union all
select f.*
from forests f
where f.trip_id = 74;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您最好的选择是在一个带有类型代码的表中包含您的所有位置(或实际数据库中的任何情况)。如果它们是异构对象,那么您可以使用一种模式,其中您有一个共享表,每个类型具有1:1关系的各个表。例如,Destinations(包含山脉和森林之间共享的数据),destination_id表中的Hikes,然后是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

根据我的经验,你会继续遇到这种结构的问题。