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_atb_b. doc1とに同じデータがある場合はdoc2、 のデータをそのまま使用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。これらのプロセスを 1 つのクエリで作成できますか? どうやって?ありがとうございました :)

例から、結果は次のようになります。

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

2 に答える 2

3

LEFT JOINwithを使用してすべてのテーブルを結合できます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 の doc に一致するすべてのレコードを返します。

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 に答える