SQL连接查询;订单与发票

SQL连接查询;订单与发票,sql,join,derby,Sql,Join,Derby,我在编写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

我在编写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
我在用德比。我尝试了一些东西,但不值得调试。有人能帮忙吗

试试这个

   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'

好的,这个没有完全连接

  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

请详细解释您是如何获得所需结果集的。111如何连接到221?为什么不是112对222?@fancyPants查看表格
txnasociation
有一个协会b/w 111和221,但112和222没有。哦,是的,不知怎么漏掉了:)亲爱的落选选民,请在评论中说明落选的原因。对不起,我无法尝试,因为完全联接类型在derby中不可用,但derby同时具有左外联接和右外联接,所以可以合并它们。