我有两张由user_id
连接的桌子。在下面的查询中,我比较表2中的act_val
,以确保它介于或等于表2中的min_val
和max_val
。但有时表一中的auser_id
在表二中找不到。在这些情况下,我希望act_val
被当作0来处理,并在表1的min_val
较低的地方进行限定。有可能吗?怎么会这样?
SELECT tb1.id FROM table_one tb1
INNER JOIN table_two tb2 WHERE
tb1.min_val <= tb2.act_val AND tb1.min_val >= tb2.act_val
AND tb2.user_id = tb1.user_id
GROUP BY ad.id;
最佳答案
在左连接条件(ON子句)中需要用户id链接,在WHERE子句(filter)中需要其余链接。tb2.act值丢失时,使用IFNULL将其视为0。我还修复了您的第二个条件,它应该是tb1.max_val>=而不是tb1.min_val>=
SELECT tb1.id
FROM table_one tb1
LEFT JOIN table_two tb2 ON tb2.user_id = tb1.user_id
WHERE tb1.min_val <= IFNULL(tb2.act_val,0)
AND tb1.max_val >= IFNULL(tb2.act_val,0)
GROUP BY tb1.id;
LEFT JOIN:
如果在左联接的ON或USING部分中没有右表的匹配行,则右表将使用所有列都设置为空的行。可以使用此事实在表中查找在其他表中没有对应项的行:
关于mysql - 如何从MySQL将NULL值视为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5292076/