【问题标题】:Query a table with 2 foreign keys查询具有 2 个外键的表
【发布时间】:2015-12-18 10:08:02
【问题描述】:

我有这 4 张桌子。

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 

我正在尝试创建一个查询,该查询返回包含所有源和目标 ID 的每封邮件。

到目前为止,我已经提出了这个查询,但它的效率相当低,因为它查询同一个表两次。

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

【问题讨论】:

    标签: mysql sql select join union


    【解决方案1】:

    试试这个:

    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;
    

    【讨论】:

    • 完全忘记了我可以将邮件查询移出!
    猜你喜欢
    • 2014-10-17
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 2017-09-12
    相关资源
    最近更新 更多