如果满足特定条件,我只想加入时如何加入多个表?
示例:
TABLE A
NUM TYPE
1 DUPLICATE
2 DUPLICATE
3 INTERACT
TABLE B
ID REF_TYPE REF_ID
1 ORDER 000001
1 SEVERE NULL
1 CATALOG 993004
2 ORDER 003320
2 CATALOG 994002
3 MILD NULL
3 INTERACTION NULL
3 CATALOG 992002
现在这里变得棘手......
ORDER_TABLE
ID ORDER_NAME
000001 ORDER1
003320 ORDER2
CATALOG_TABLE
ID CATALOG_NAME
992002 CATALOG1
993004 CATALOG2
994002 CATALOG3
我想做什么:
JOINED TABLE
NUM TYPE ORDER_NAME CATALOG_NAME
1 DUPLICATE ORDER1 CATALOG2
2 DUPLICATE ORDER2 CATALOG3
3 INTERACT NULL CATALOG1
事实上,我需要加入的不仅仅是订单和目录表,但这是一个样本,可以了解如何使用连接的逻辑来满足条件。
我尝试用多个选择(table_b b,table_b b1,table_b b2等)对表进行外连接,但是,我似乎无法弄清楚是否有一种方法来对连接进行语法处理以便您可以加入只有满足条件 - 将B1.REF_ID加入ORDER_TABLE.ID;但只有当B1.REF_TYPE ='ORDER'时。
有人可以帮忙吗?
答案 0 :(得分:0)
使用MAX
与CASE
和GROUP BY
一起使用LEFT JOIN
以及使用SELECT A.NUM, A.TYPE,
MAX(CASE WHEN B.REF_TYPE = 'ORDER' THEN O.ORDER_NAME END) ORDER_NAME,
MAX(CASE WHEN B.REF_TYPE = 'CATALOG' THEN C.CATALOG_NAME END) CATALOG_NAME
FROM TABLE_A A
LEFT JOIN TABLE_B B ON A.NUM = B.ID
LEFT JOIN ORDER_TABLE O ON B.REF_ID = O.ID
LEFT JOIN CATALOG_TABLE C ON B.REF_ID = C.ID
GROUP BY A.Num, A.Type
时,此类内容应该有效:
{{1}}
答案 1 :(得分:0)
您可以使用coalesce()和left join的组合来完成此操作。这是sql server example,但我已经用oracle完成了。
答案 2 :(得分:0)
如果我理解你要做的事情,请将条件放在ON子句中:
SELECT a.num, a.type, o.order_name, c.*
FROM table_a a
LEFT JOIN table_b b1 ON b1.id = a.num AND b1.ref_type = 'ORDER'
LEFT JOIN order_table o ON o.id = b1.ref_id
LEFT JOIN table_b b2 ON b2.id = a.num AND b2.ref_type = 'CATALOG'
LEFT JOIN catalog_table c ON c.id = b2.ref_id
ORDER BY a.num
这是SQLFiddle。