【问题标题】:SQL Join query ; Order vs InvoiceSQL 连接查询;订单与发票
【发布时间】:2023-03-06 10:39:01
【问题描述】:

我在编写 SQL 联接查询方面有点新手,我需要有关联接查询的帮助。这是表格。

Table : Txn
TXN_KEY     TYPE      DATE
--------------------------
111          OD       10/5   
221          CS       11/5 
112          OD       12/5
222          CS       12/5

Table: TxnAssociation
TXN_KEY      REF_TXN_KEY     TYPE
---------------------------------
221           111             OS

输入OD 是订单,CS 是客户销售。有一些未结订单,也有一些没有订单的销售。

需要一个连接查询来获得类似的输出

ORD      SAL
--------------
111      221
112      null
null     222

我正在使用德比。我尝试了一些东西,但不值得调试。有没有人可以帮忙...

【问题讨论】:

  • 请详细说明您是如何获得所需结果集的。 111如何连接221?为什么不是 112 到 222?
  • @fancyPants 见表TxnAssociation 有关联 b/w 111 和 221 但 112 和 222 没有。
  • 哦,是的,不知何故错过了:)
  • 亲爱的投票者请在评论中写下投票的理由。

标签: sql join derby


【解决方案1】:

好的,这个没有全连接

  SELECT orders.TXN_KEY as ORD,ta.TXN_KEY as SAL
    FROM Txn orders 
    LEFT JOIN TxnAssociation ta ON orders.TXN_KEY = ta.REF_TXN_KEY 
   WHERE isnull(orders.Type,'OD') = 'OD'
UNION ALL 
  SELECT NULL  as ORD,sales.TXN_KEY as SAL
    FROM Txn sales
   WHERE sales.Type= 'CS'
 AND NOT EXISTS (SELECT 1 
                   FROM Txn s 
                   JOIN TxnAssociation t ON s.TXN_KEY = t.TXN_KEY 
                                            AND s.Type= 'CS' AND sales.TXN_KEY = s.TXN_KEY)

这个更好:

SELECT orders.TXN_KEY as ORD,ta.TXN_KEY as SAL
  FROM Txn orders 
  LEFT JOIN TxnAssociation ta ON orders.TXN_KEY = ta.REF_TXN_KEY 
 WHERE isnull(orders.Type,'OD') = 'OD'
UNION ALL 
SELECT ta.REF_TXN_KEY  as ORD,sales.TXN_KEY as SAL
 FROM Txn sales
 LEFT JOIN TxnAssociation ta ON sales.TXN_KEY = ta.TXN_KEY
WHERE sales.Type= 'CS'
  AND ta.REF_TXN_KEY is null

【讨论】:

    【解决方案2】:

    试试这个

       SELECT orders.TXN_KEY as ORD, sales.TXN_KEY as SAL
         FROM TxnAssociation ta
         FULL JOIN Txn orders ON orders.TXN_KEY = ta.REF_TXN_KEY 
         FULL JOIN Txn sales ON sales.TXN_KEY = ta.TXN_KEY 
        WHERE isnull(orders.Type,'OD') = 'OD'
          AND isnull(sales.Type,'CS') = 'CS'
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多