从3个表中选择数据在一列中具有相同的数据,在另一列中具有不同的数据

时间:2012-10-21 13:12:18

标签: php mysql

我有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_atb_b。如果doc1doc2中的数据相同,我只需使用doc1中的数据tb_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

2 个答案:

答案 0 :(得分:3)

您可以使用LEFT JOIN 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 Demo

答案 1 :(得分:0)

以下内容将返回与A,B和B中的doc匹配的所有记录。 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