我有一个查询
SELECT * FROM my_tbl1
WHERE id IN ( SELECT id1 FROM my_tbl2 WHERE user_id=2)
OR id IN ( SELECT id2 FROM my_tbl2 WHERE user_id=2)
OR id IN ( SELECT id3 FROM my_tbl2 WHERE user_id=2)
OR id IN ( SELECT id4 FROM my_tbl2 WHERE user_id=2)
OR id IN ( SELECT id5 FROM my_tbl2 WHERE user_id=2)
.......
OR id IN ( SELECT id22 FROM my_tbl2 WHERE user_id=2)
id1 和 id2 以及... id22 上的列是 my_tbl2 中的列。这让我写了22次 OR 子句并一次又一次地击中my_tbl2。
我尝试了 GROUP_CONCAT ,但是只返回用逗号分隔的值字符串。这样就不起作用了
我的意思是以下查询无效
SELECT * FROM my_tbl1
WHERE id IN ( SELECT GROUP_CONCAT(id1,id2,id3..id22) FROM my_tbl2 WHERE user_id=2)
另一个想法,我担心 IN CLAUSE
的子查询 SELECT * FROM my_tbl1 a
WHERE EXISTS ( SELECT 1 FROM my_tbl2 b
WHERE b.user_id=2 AND a.id IN (b.id1,b.id2,b.id3...b.id22 )
有什么方法可以简化这个吗?
谢谢
答案 0 :(得分:1)
select my_tbl1.* from my_tbl1,my_tbl2
where (id=id1 or id=i2 ... or id=id22) and user_id=2
答案 1 :(得分:0)
如何使用FIND_IN_SET()
?
WHERE FIND_IN_SET(ID, (SELECT CONCAT_WS(',',id1,id2,id3,...,id22)
FROM my_tbl2
WHERE user_id=2)) > 0
或使用JOIN
和IN
SELECT DISTINCT a.*
FROM my_tbl1 a
INNER JOIN my_tbl2 b
ON a.id IN (b.id1,b.id2,b.id3,...,b.id22)
WHERE b.user_id = 2