作者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://webptt.com/cn.aspx?n=bbs/Database/M.1433339589.A.FD7.html
1F:推 JYHuang: 谢谢~ 06/03 21:59
2F:→ JYHuang: 不好意思没说清楚,不过这个CASE里两个Table都是多笔 06/03 21:59
3F:→ JYHuang: 资料的集合,所以这样JOIN的话似乎会限缩Table2的范围 06/03 22:00
4F:→ 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