加入两个select语句一个表

时间:2018-03-08 17:20:03

标签: sql left-join inner-join

我想加入两个表来显示一个结果集。任何帮助将不胜感激

tbl_Orders:

┌─────────┬────────────────┬────────────────┐
│ OrderID │ PublicationID1 │ PublicationID2 │
├─────────┼────────────────┼────────────────┤
│       1 │              1 │              2 │
│       2 │              3 │              1 │
│       3 │              1 │              3 │
└─────────┴────────────────┴────────────────┘

tbl_Publications:

┌───────┬─────────────────────────┐
│ PubID │    Publication_Name     │
├───────┼─────────────────────────┤
│     1 │ "Dilevry of .."         │
│     2 │ "Pickup of ..."         │
│     3 │ "Emailing documents.."  │
└───────┴─────────────────────────┘

我要找的结果是:

┌──────────┬────────────────────────┬────────────────────────┐
│  OrderID │    PublicationName1    │   PublicationName2     │
├──────────┼────────────────────────┼────────────────────────┤
│        1 │ "Dilevry of .."        │ "Pickup of ..."        │
│        2 │ "Emailing documents.." │ "Dilevry of .."        │
│        3 │ "Dilevry of .."        │ "Emailing documents.." │
└──────────┴────────────────────────┴────────────────────────┘

我试过的查询:

SELECT *  FROM
    (SELECT Organization_ID, OrganizationName, a.PublicationID2, Publication_Name
     FROM tbl_Orders a, tbl_Publications b
     WHERE a.PublicationID2= b.PubID) t1 
Left JOIN
    (SELECT b.PubID, PublicationName AS Publication_Name2
     FROM tbl_Orders a, tbl_Publications b
     WHERE a.PublicationID2= b.PubID) t2 ON t1.Pub_ID2 = t2.Pub_ID

3 个答案:

答案 0 :(得分:1)

您不需要子查询。只需LEFT JOIN tbl_Publications两次,一次在PublicationID1上,另一次在PublicationID2上:

SELECT o.OrderID,
       p1.Publication_Name AS PublicationName1,
       p2.Publication_Name AS PublicationName2
FROM tbl_Orders o
LEFT JOIN tbl_Publications p1 ON o.PublicationID1 = p1.PubID
Left JOIN tbl_Publications p2 ON o.PublicationID2 = p2.PubID

答案 1 :(得分:1)

您可以像这样使用joins

SELECT 
    orderId, 
    b.Publication_Name as PublicationName1 
    c.Publication_Name as PublicationName2 
from tbl_Orders a
LEFT JOIN tbl_Publications b ON a.PublicationID1 = b.PubID
Left JOIN tbl_Publications c ON a.PublicationID2 = c.PubID

在大多数情况下,您不会使用sub queries因为他们对系统感到非常沉重 - 所以如果您可以避免它在没有子查询的情况下工作。

我会把它移到它下面的一个表格中,你可以有多个订单商品。

订单库存将链接到您自己的库存,您还会包含有关价格等的信息,因此进一步的价格变化不会对您产生影响:)

答案 2 :(得分:0)

如果你想要子查询,这也可以。

SELECT ord.Orderid,
(select Publication_Name 
 from tbl_Publications 
 where pubid=ord.PublicationID1) as publication_name1,
 (select Publication_Name 
 from tbl_Publications 
 where pubid=ord.PublicationID2) as publication_name2
FROM tbl_Orders ord