0

明確な結果のみを表示する多くの方法を見つけましたが、明確な結果とそうでない結果を一緒に選択するにはどうすればよいでしょうか? 次の表を検討してください。

    A
    ---------------------------------
    |    id    |   col1   |   col2  |
    ---------------------------------
    |    1     |    aa    |   dd    |
    ---------------------------------
    |    1     |    bb    |    ee   |
    ---------------------------------
    |    2     |    cc    |    ff   |
    ---------------------------------

    B
    ---------------------------------
    |    id    |   col1   |   col2  |
    ---------------------------------
    |    1     |    a     |    d    |
    ---------------------------------
    |    2     |    b     |    e    |
    ---------------------------------
    |    3     |    c     |    f    |
    ---------------------------------

    C
    ---------------------------------
    |    id    |   col1   |   col2  |
    ---------------------------------
    |    1     |    x     |    1a   |
    ---------------------------------
    |    2     |    y     |    2b   |
    ---------------------------------
    |    3     |    x     |    3c   |
    ---------------------------------

ユーザーが id と列のリストを提供します。たとえば、id = 1 と列 = (a.col1、b.col1、および c.col2) とします。ID が何回表示されても、ID が一致するすべての列情報を取得するクエリを作成するにはどうすればよいですか?

私の現在のクエリは次のとおりです。

    SELECT a.col1, b.col1, c.col2
    FROM a
        LEFT JOIN b
            ON b.id = a.id
        LEFT JOIN c
            ON  c.id = b.id
    WHERE a.id = 1

問題は、両方の結果 (または一致する繰り返し ID を持つテーブルからのすべての結果) を取得したいときに、テーブル A から 1 つの結果しか得られないことです。注: テーブル A では、列 id と col1 が一緒になって主キーを構成しているため、ID が繰り返されます。

提案?

ありがとう!

4

1 に答える 1

1

問題のデータでは、テーブル A に繰り返し ID はありません。クエリは A から 1 行のみを返す必要があります。

ただし、クエリにエラーがあります。2 番目の結合は、2 番目のテーブルではなく、最初のテーブルに戻る必要があります。

SELECT a.col1, b.col1, c.col2
FROM a
    LEFT JOIN b
        ON b.id = a.id
    LEFT JOIN c
        ON  c.id = a.id
WHERE a.id = 1

そのテーブルに一致するものがない場合、NULL になる可能性がありますc.id = b.idb.id

また、あなたの説明から、 aunionが最善のアプローチであるかどうか疑問に思います:

select a.col1, 'a'
from a
where id = 1
union all
select b.col1, 'b'
from b
where id = 1
union all
select c.col2, 'c'
from c
where id = 1
于 2013-06-20T00:00:13.137 に答える