簡體   English   中英

根據條件使用JOIN的MySQL語法

[英]MySQL syntax for JOIN depending on condition

以下查詢的語法是什么:

如果存在匹配的引用(Table1ID),則從Table1和JOIN Table2獲取所有列,否則獲取JOIN Table3。

簡化的數據庫結構大致如下

 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)?

如果您不想為每個聯接使用一整套單獨的列,那么您可能正在尋找以下內容:

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演示

這是做到這一點的一種方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM