SELECT WHERE IN(子查询)

时间:2016-06-30 11:01:56

标签: mysql

对于这样的事情有什么办法吗? :

SELECT * FROM table1
INNER JOIN table2
    ON table1.field = table2.field
WHERE field2 IN (SELECT * FROM table3 WHERE field LIKE '%pattern%')

更准确地说,在IN()内部我需要table3行中与%pattern%匹配的值,因此我可以从主查询中获取具有field3 IN()范围的table3值的行。

3 个答案:

答案 0 :(得分:0)

您应该只选择所需的字段,如

SELECT field2 FROM table3 WHERE field LIKE '%pattern%'

答案 1 :(得分:0)

您可以这样做,但列的数量和类型必须匹配

SELECT * FROM table1
INNER JOIN table2
ON table1.field = table2.field
WHERE field2 IN (SELECT field3 FROM table3 WHERE field LIKE '%pattern%')

或者例如:

SELECT * FROM table1
INNER JOIN table2
ON table1.field = table2.field
WHERE (field2_1, field2_2) fi IN (SELECT field3_1, field3_2
                                 FROM table3 
                                 WHERE field LIKE '%pattern%')

(field2_1,field2_2)和field3_1,field3_2必须匹配数字和类型

答案 2 :(得分:0)

您可以直接使用JOIN for table3:

代替子查询
SELECT *
FROM table1 T1
INNER JOIN table2 T2 ON T2.field = T1.field
INNER JOIN table3 T3 ON T3.field = T1.field2
WHERE T3.field LIKE '%pattern%'

此处T1,T2和T3为table alias以提高可读性