0

我有 3 张桌子:

tb_a                tb_b             tb_c
==============      ==============   ==============
|id|doc1|urla|      |id|doc2|urlb|   |id|doc3| sum|
==============      ==============   ==============
| 1| c1 |url1|      | 1| c2 |urla|   | 1| c2 |sum1|
| 2| c3 |url3|      | 2| c4 |urlb|   | 2| c3 |sum3|
| 3| c2 |url2|      | 3| c6 |urlc|   | 3| c4 |sum4|
==============      ==============   | 4| c6 |sum6|
                                     ==============

首先,我想检查tb_aand tb_b。如果 和 中有相同的数据doc1doc2我只使用中的数据doc1tb_a这是第一个查询:

SELECT 
   a.doc1
FROM 
   tb_a a
LEFT JOIN 
   tb_b b
   ON a.doc1 = b.doc2
WHERE 
   b.doc2 IS NULL 

然后左加入tb_c得到sum。我可以在一个查询中完成这些过程吗?如何?谢谢你 :)

从示例中,因此结果必须是:

c3 url3 sum3 
c2 url2 sum1
c4 urlb sum4
c6 urlc sum6
4

2 回答 2

3

LEFT JOIN您可以使用with连接所有表COALESCE

SELECT  a.doc3 DOCValue, 
        COALESCE(b.urla, c.urlb) AS URLValue,
        a.`SUm` AS SUMValue
FROM    tb_c a
        LEFT JOIN tb_a b
            ON a.doc3 = b.doc1
        LEFT JOIN tb_b c
            ON a.doc3 = c.doc2

SQLFiddle 演示

于 2012-10-21T13:27:06.243 回答
0

以下将返回与 A、B 和 C 中的文档匹配的所有记录。我认为这就是您所追求的。

SELECT 
   a.doc1, C.SUM
FROM 
   tb_a a
LEFT JOIN 
   tb_b b
   ON a.doc1 = b.doc2
left join TB_C C ON C.DOC3=B.DOC2
WHERE 
   b.doc2 IS NOT NULL 
于 2012-10-21T13:21:51.403 回答