这是小提琴; http://sqlfiddle.com/#!2/af8015/9
我有一些数据,我想设置
我正在使用以下查询;
select *,
case cl.user_id
when null then -1
when im.user_id then 1
end as result
from im
left join cl on cl.user_id = im.user_id
and cl.id_g = im.id_g
left join user on user.user_id = im.user_id
left join g on g.id_g = im.id_g
但是,它为-1返回null,并且我不能为最后一种情况设置0。
预期结果表是;
user id - g id - result
1 1 1
1 2 1
1 3 0
1 4 1
2 1 1
2 2 1
2 3 -1
2 4 0
...
答案 0 :(得分:1)
我看不到从样本数据中生成0
结果的方法。
我相信你的result
参数应该像这样计算;
IF (cl.user_id IS NOT NULL and cl.id_g IS NOT NULL, 1,
IF(im.user_id IS NOT NULL and im.id_g IS NOT NULL, -1,0)
) result
而且,我认为您的JOIN操作系列应该是这样的。
FROM user
LEFT JOIN im ON user.user_id = im.user_id
LEFT JOIN cl ON user.user_id = cl.user_id AND im.id_g = cl.id_g
LEFT JOIN g ON im.id_g = g.id_g
也就是说,你应该带着user
表。这是一个例子:http://sqlfiddle.com/#!2/a5c6ef/1/0
您的result
参数计算如下:
case cl.user_id
when null then -1
when im.user_id then 1
end as result
null
值很奇怪。 null
值永远无法与任何内容进行比较,即使是另一个null
值也是如此,因此when null then -1
永远不会触发。另一方面,这个表达式应该可行。
case when cl.user_id IS NULL then -1
when im.user_id IS NULL then 1
else 0 end as result