1

私は 3 つのテーブル を持っておりa、それら bの間に共通点があります。cid

Table a:-
id      name      value
 1        a         4
 2        v          6

Table b:-
id      abc
 2        54
 3        56

Table c:-
id       bcd
1         54
3         34

今私が欲しいのは、データがすべてのテーブルから取得される場所の条件でidが何であるかです。

その方法を教えてください。

期待される結果-

クエリが

select * from a left join b on a.id=b.id left join c on a.id=c.id where b.id=3

id  name   value   bcd   abc
3    NULL  NULL    34    56

クエリが

select * from a left join b on a.id=b.id left join c on a.id=c.id where a.id=1

id  name   value   bcd   abc
3    a      4       54    NULL
4

4 に答える 4

3

この問題へのアプローチはどうですか?:)

SELECT 
    z.id,
    a.name,
    a.value,
    c.bcd,
    b.abc
FROM 
    (
        SELECT
            DISTINCT y.id id
        FROM
            (
                SELECT id FROM a
                    UNION ALL
                SELECT id FROM b
                    UNION ALL
                SELECT id FROM c
            ) y     
    ) z
    LEFT JOIN a ON z.id = a.id
    LEFT JOIN b ON z.id = b.id
    LEFT JOIN c ON z.id = c.id
where z.id = 3

SQLフィドル

このようにして、クエリが存在するテーブルを気にせずに、クエリに番号を与えるだけで済みます。

于 2013-07-25T08:18:02.073 に答える
1

それはあなたが条件で設定しているものに依存しますWHERE。設定している場合はWHERE b.ID = 3、次のように B で他のテーブルを結合する必要があります。

SELECT A.ID AS A_ID,A.Name, A.value
      ,B.Id as B_ID,B.abc
      ,C.id AS C_ID, c.bcd 
  FROM b 
  LEFT JOIN a ON a.id = b.id 
  LEFT JOIN c ON a.id = c.id 
 WHERE b.id=3;

これはb.ID = 3、 がテーブル A になく、テーブル C がテーブル A と結合されているために発生します。テーブル A.ID = 1 を設定すると、次のLEFT JOINように使用して他のテーブルを A と結合する必要があります。

SELECT A.ID AS A_ID,A.Name, A.value
      ,B.Id as B_ID,B.abc
      ,C.id AS C_ID, c.bcd 
  FROM A 
  LEFT JOIN B ON a.id = b.id 
  LEFT JOIN c ON a.id = c.id 
 WHERE A.id=1;

このSQLFiddleを参照してください

于 2013-07-25T07:11:17.790 に答える
0

これは技術的に不可能です。特定のテーブルのいずれにも ID が存在しない場合にデータを取得する方法で ID を使用している場合、where のロジックを変更しています;)。

しかし、あなたができることは

SELECT * FROM (UNION から ID,NAME,VALUE として AID を選択 B UNION から ID,NAME,NULL として BID を選択 CID から ID,NAME,NULL として値として選択 CID として CID を選択) WHERE ID =''

お役に立てれば

そうでなければ明確にしてください。あなたが欲しいもの。

よろしく

アシュトッシュ・アリア

于 2013-07-25T06:45:48.717 に答える
0

予想される結果の説明がほとんど見つかりませんが、推測してみます。

SELECT 
    b.id,
    a.name,
    a.value,
    c.bcd,
    b.abc
FROM 
    b
    INNER JOIN c ON b.id = c.id
    LEFT JOIN a ON b.id = a.id

SQLフィドル

于 2013-07-25T07:09:57.730 に答える