作者sing10407 (阿U)
看板Database
標題Re: [SQL ] MySQL LEFT JOIN 多條件的優先權
時間Wed Jun 3 21:53:05 2015
※ 引述《JYHuang (夏天到了,冷不起來了說)》之銘言:
: 資料庫名稱: MySQL
: 內容/問題描述:
: SELECT * FROM Table1 as a
: LEFT JOIN Table2 as b
: ON a.key = b.key AND b.id IN (1,2)
: WHERE ....
select * from Table1 as a
left join Table2 as b on a.key=b.key
where b.id in
(
SELECT min(id) FROM Table1 as a
left join Table2 as b on a.key=b.key
and b.id in (1,2)
where ...
group by b.id
)
: 我只想JOIN Table2 裡符合資料的第一筆
: 如果id = 1符合的話 join id = 1 的資料
: 不符的話才是id = 2 的
: 用何種方式會比較好呢?
: 本來想再JOIN一次,然後
: SELECT * , (CASE b.id WHEN null THEN b.name ELSE c.name END) as name
: FROM Table1 as a
: LEFT JOIN Table2 as b
: ON a.key = b.key AND b.id = 1
: LEFT JOIN Table2 as c
: ON a.key = b.key AND b.id = 2
: WHERE ...
: 不過Table2要抓出的欄位有十多個,這樣除了麻煩外好像也會拖累效率?
: 而且要是id再多一個選項的話,條件會更天荒地老吧 @.@
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.38.18
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1433339589.A.FD7.html
推 JYHuang: 謝謝~ 06/03 21:59
→ JYHuang: 不好意思沒說清楚,不過這個CASE裡兩個Table都是多筆 06/03 21:59
→ JYHuang: 資料的集合,所以這樣JOIN的話似乎會限縮Table2的範圍 06/03 22:00
→ JYHuang: 只能取到前幾筆 06/03 22:00
對不起我錯了...
我重新打了一個版本
關鍵在於我用min(或max)
看有沒有符合需求
你可以google 關鍵字 sql get top 1 of each group
或去stackoverflow問 那裡會較多人回答
※ 編輯: sing10407 (61.223.38.18), 06/03/2015 22:32:31
※ 編輯: sing10407 (61.223.38.18), 06/03/2015 22:50:11