它可以通过多种方式完成。到目前为止,masum7 vai的解决方案似乎是最好的。然而,除此之外,也可以通过以下方式进行,以及:
SELECT * FROM table_2 as t2
WHERE t2.column_1 IN
(SELECT t1.column_1 FROM table_1 as t1
WHERE t1.column_1 IN (SELECT t1.column_2 FROM table_1 as t1)
AND t1.column_3 = 1)
有点复杂,因为我已经使用子查询代替连接。所以让我解释一下。
第一部分:
SELECT * FROM table_2 as t2
打算从table_2
检索ALL值。
但话又说回来,你要根据来自table_1
一些具体数据从table_2
一些具体数据。因此,这里是WHERE
子句,以及从table_1
中检索数据的子查询。
第二部分:
WHERE t2.column_1 IN
(SELECT t1.column_1 FROM table_1 as t1
WHERE t1.column_1 IN (SELECT t1.column_2 FROM table_1 as t1)
AND t1.column_3 = 1)
可以被分成进一步的子部分。
副部 - 1:
SELECT t1.column_1 FROM table_1 as t1
是要检索的table_1
column_1
ALL值。
但是,那不是你想要的。您想要特指:
a。 b。在column_2
和
中存在的那些column_1
的值。与此同时,的column_1
这些值针对column_3
值为1
基于这2点,自带子部分2
子部分 - 2:
WHERE t1.column_1 IN (SELECT t1.column_2 FROM table_1 as t1)
AND t1.column_3 = 1)
第一WHERE
条件说column_1
值必须存在于所有column_2
值的嵌套子查询中。第二个说,相应的column_3
值必须是1.
希望这个查询检索您的预期结果,并且您理解我对查询的解释。祝你好运,祝你有美好的一天!祝您在StackOverflow中有一段美好的旅程。 :)
EDIT-1:
只是一个小除了查询。我忘了添加一个GROUP BY
条款。它应该是GROUP BY
t2.column_1
。
因此,修改后的查询变为:
SELECT * FROM table_2 as t2
WHERE t2.column_1 IN
(SELECT t1.column_1 FROM table_1 as t1
WHERE t1.column_1 IN (SELECT t1.column_2 FROM table_1 as t1)
AND t1.column_3 = 1)
GROUP BY t2.column_1
对不起,我错过了出来。 :)
谢谢我得到它的工作,因为我想。 – Joe 2014-09-23 04:15:42