首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用两个外键查询表

用两个外键查询表
EN

Stack Overflow用户
提问于 2015-12-18 10:08:02
回答 1查看 54关注 0票数 2

我有这四张桌子。

代码语言:javascript
复制
Mail
----
id
date

Source (can have many source)
------
id
mailID : FK Mail.id
personID : FK Person.id

Destination  (can have many destination)
-----------
id 
mailID : FK Mail.id
personID : FK Person.id

Person
------
id
name 

我正在尝试创建一个查询,它返回所有源ids和目标ids的每个邮件。

到目前为止,我已经提出了这个查询,但是由于它两次查询同一个表,所以效率很低。

代码语言:javascript
复制
Select * FROM (
    Select m.*, personID, 'Source' AS TableName
    FROM Mail m join Source s 
    ON m.id = s.mailid
UNION ALL
    Select m.*, personID, 'Destination' AS TableName 
    FROM Mail m join Destination d
    ON m.id = d.mailid


) t ORDER BY id, TableName;

results:

id | date | personID | TableName
--------------------------------
 1 | 1-1-11| 3       | Source
 1 | 1-1-11| 4       | Source
 1 | 1-1-11| 5       | Source
 1 | 1-1-11| 10      | Destination
 1 | 1-1-11| 11      | Destination
 2 | 2-2-11| 1       | Source
 2 | 2-2-11| 2       | Destination
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-18 10:11:07

试试这个:

代码语言:javascript
复制
SELECT m.id, m.name, a.personID, a.TableName
FROM Mail m
INNER JOIN (SELECT s.mailid, s.personID, 'Source' AS TableName
            FROM Source s 
           UNION ALL
            SELECT d.mailid, d.personID, 'Destination' AS TableName
            FROM Destination d
           ) AS a ON m.id = a.mailid
ORDER BY m.id, a.TableName;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34353023

复制
相关文章

相似问题

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