[英]join and left join same table
我有桌子:
ppls
pid | name
----+-----
1 | test1
2 | test2
貓
cid | cname | cval
----+-------+-----
1 | cat1 | ctest1-1
2 | cat2 | ctest1-2
3 | cat1 | ctest2-1
4 | cat2 | ctest2-2
ppls_cats
pid | cid
----+----
1 | 1
1 | 2
2 | 3
2 | 4
我需要結果:
name | cat1 | cat2
------+----------+---------
test1 | ctest1-1 | ctest1-2
test2 | ctest2-1 | ctest2-2
查詢:
select name, c1.cval as cat1, c2.cval as cat2 from ppls p
join ppls_cats pc on p.pid=pc.pid
left join cats c1 on pc.cid=c1.cid and c1.cname='cat1'
left join cats c2 on pc.cid=c2.cid and c2.cname='cat2'
無法正常工作。 怎么修?
嘗試這個:
SELECT t1.name,
MAX(CASE WHEN t3.cname = 'cat1' THEN cval END) AS cat1,
MAX(CASE WHEN t3.cname = 'cat2' THEN cval END) AS cat2
FROM ppls AS t1
LEFT JOIN ppls_cats AS t2 ON t1.pid = t2.pid
LEFT JOIN cats AS t3 ON t2.cid = t3.cid
GROUP BY t1.pid, t1.name
因此,使用條件聚合和對cats
表的單個聯接操作即可獲得所需的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.