首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个表之间选择特定值id所在的表

如何在两个表之间选择特定值id所在的表
EN

Stack Overflow用户
提问于 2016-03-18 03:01:43
回答 3查看 46关注 0票数 0

我的“远足”数据库中有两个表,假设表1被称为“森林”,表2被称为“山”。这两个表都有一个FOREIGN KEY "Trip_id“,它是表"Trip”(或者,这是一个虚构的例子)中的一个PRIMARY KEY,它是AUTO_INCREMENT。一次旅行既可以是山也可以是林,因此这两个表不共享任何Trip_ids。

我想根据Trip_id为某个值(比方说74)对森林或山脉执行SELECT * FROM操作。

代码语言:javascript
复制
SELECT * FROM FOREST OR MOUNTAIN WHERE Trip_id = 74 EXISTS; 

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

EN

回答 3

Stack Overflow用户

发布于 2016-03-18 03:12:11

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

代码语言:javascript
复制
select m.*
from mountains m
where m.trip_id = 74
union all
select f.*
from forests f
where f.trip_id = 74;
票数 2
EN

Stack Overflow用户

发布于 2016-03-18 03:08:11

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2016-03-18 03:11:31

最好的办法是将您的所有位置(或实际DB中的任何情况)都放在一个表中,其中包含一个类型代码。如果它们是异构对象,那么您可以使用这样一种模式,即具有单个共享表的每个类型具有1:1关系的各个表。例如,Destinations (包含在山脉和森林之间共享的数据),在Hikes表中有一个destination_id,然后是Mountains (包含特定于山脉的数据)和Forests的表,每个表都有一个destination_id,这也是它的主键。

除此之外,你可以这样做:

代码语言:javascript
复制
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

但是,根据我的经验,您将继续遇到这种结构的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36069463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档