我有一个sales_cat表和一个user_cat表。
sales_cat
user_cat
我需要获取所有sales_cat行,并使用user_cat表为特定用户加入,指示该用户是否具有该类别。例如,对于id_user = 4,它应该返回:
id_cat | name | selected
1 | kids | 1
2 | men | 1
3 | women | 0
当然,“selected”字段实际上是一个取决于user_cat中是否存在链接记录的值。我在sqlfiddle中设置了表格结构。
我当前的解决方案仅返回链接数据:
SELECT sales_cat.id_cat, sales_cat.name
FROM sales_cat
LEFT JOIN user_cat ON user_cat.id_cat = sales_cat.id_cat
WHERE user_cat.id_user = 4
......正在回归:
id_cat | name
1 | kids
2 | men
我仍然缺少“已选择”列和 3 |女性排。
有什么想法吗?谢谢!
答案 0 :(得分:3)
尝试这样
SELECT sales_cat.id_cat, sales_cat.name,case when
user_cat.id is null then 0 else 1 end as "selected" FROM
sales_cat LEFT JOIN user_cat ON
user_cat.id_cat = sales_cat.id_cat and
user_cat.id_user = 4
答案 1 :(得分:3)
试试这个:
select distinct
s.id_cat,
s.name,
case when u.id_user is null then 0 else 1 end selected
from sales_cat s
left join user_cat u on s.id_cat = u.id_cat
and (u.id_user = 4 or u.id_user is null)
虽然该方法类似于Satson的答案,但我们将空检查从user_cat
移至id_user
。
答案 2 :(得分:-1)
你可以试试这个:
SELECT sales_cat.id_cat,sales_cat.name,user_cat.id_user不为null时的情况,然后选择其他0结束 来自sales_cat LEFT JOIN user_cat ON(user_cat.id_cat = sales_cat.id_cat和user_cat.id_user = 4)