我加入了两张桌子user_id.在下面的查询中,我比较act_val在table_two,以确保它是介于两者之间或等于min_val和max_val从table_one.但有时user_id在table_two中找不到table_one.在这些情况下,我希望将act_val其视为0并且限定table_one的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;
Run Code Online (Sandbox Code Playgroud)
您需要LEFT JOIN条件中的user_id链接(ON子句),WHERE子句中的其余部分(过滤器).使用IFNULL时,tb2.act_val在缺失时被视为0 .我也修复了你的第二个条件,它应该是tb1.max _val> = not 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;
Run Code Online (Sandbox Code Playgroud)
如果LEFT JOIN中ON或USING部分中的右表没有匹配的行,则右表使用所有列设置为NULL的行.您可以使用此事实在表中查找在另一个表中没有对应项的行:
| 归档时间: |
|
| 查看次数: |
5705 次 |
| 最近记录: |