0

質問があります

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)

id1id2などid22 はmy_tbl2の列です。これにより、OR句を22回記述し、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 )

これを簡単にする方法はありますか?

ありがとうございました

4

2 に答える 2

1
select my_tbl1.* from my_tbl1,my_tbl2
where (id=id1 or id=i2 ... or id=id22) and user_id=2
于 2013-09-17T08:27:56.387 に答える
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
于 2013-09-17T08:36:03.170 に答える