我有两个表,一个有数据,另一个有一些数据值。我需要选择所有数据,其值如下:
(data=1 OR data=2) AND (data=3 OR data=4)
对于每个Info ofc,可能有很多值,所以它应该是GROUP BY
,但这就是我对此的所有想法。我尝试过这样的事情:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.info_id WHERE val IN(1)AND val IN(2)GROUP BY id
当然它不起作用,因为在一个字段中没有不同数字的信息。你能帮忙吗?
答案 0 :(得分:1)
您可以使用having
子句执行此操作:
SELECT id
FROM t1 LEFT JOIN t2 ON t1.id = t2.info_id
GROUP BY id
having (sum(data = 1) > 0 or sum(data = 2) > 0) and
(sum(data = 3) > 0 or sum(data = 4) > 0)
sum(data = 1)
这样的每个表达式都会计算与id
相同的行中匹配该值的行数。
注意:这将返回与条件匹配的id
。要获取原始数据,您需要加入表格。