0

次のクエリの構文はどうなりますか。

一致する参照(Table1ID)が存在する場合はTable1およびJOIN Table2からすべての列を取得し、存在しない場合はJOINTable3を取得します。

簡略化されたDB構造は多かれ少なかれ以下のようになります

 Table1
 ID     Type
 1      std

 Table2
 ID     Table1ID    Title    Language
 1      1           Test     en

 Table3
 ID     Table1ID    Title    Language     Flag
 1      1           Other    en           1

また、Table3には、単一のTable1.idを参照する複数のエントリがあることに気付きました。すべての結果に対して最新のエントリ(IDが最も高い)のみを返すように制限するにはどうすればよいですか?

4

2 に答える 2

2

結合ごとに個別の列セット全体が必要ない場合は、これが探しているものである可能性があります。

SELECT   *
FROM     (     
         SELECT    a.ID AS Table1ID, a.Type, b.ID, b.Title, b.Language, NULL AS Flag
         FROM      Table1 a
         JOIN      Table2 b ON a.ID = b.Table1ID

         UNION ALL

         SELECT    a.ID, a.Type, c.ID, c.Title, c.Language, c.Flag
         FROM      Table1 a
         LEFT JOIN Table2 b ON a.ID = b.Table1ID
         JOIN      Table3 c ON a.ID = c.Table1ID
         JOIN      (
                   SELECT   MAX(id) AS maxid
                   FROM     Table3
                   GROUP BY Table1ID
                   ) d ON c.ID = d.maxid
         WHERE     b.ID IS NULL
         ) a
ORDER BY a.Table1ID

SQLFiddleデモ

于 2012-08-04T17:59:13.873 に答える
1

これはそれを行う1つの方法です。

select table1.id, table1.type, ifnull(table2.title, table3.title)
from table1
left join table2 on table1.id = table2.table1ID
left join table3 on table1.id = table3.table1ID
于 2012-08-04T17:03:45.557 に答える