2014-09-23 112 views
-1

我想构造一个复杂的SQL查询。COMPLEX SQL/SELECT - INNER JOIN

链接到表图像:http://i.stack.imgur.com/ZujIm.png(抱歉,由于某些原因我无法插入图像)。

首先,我想选择所有条目WHERE COLUMN_1和COLUMN_2对彼此的类似ID和WHERE Column_3等于1

因此,它应该只返回标识:10000001个10000002和NOT IDS: 10000003和10000004,因为id 10000004在column_3中有2,因此不是id 10000003的倒数。

其次,一旦从table_1选择id 10000001和10000002,我想从table_2中检索数据。

因此,我想查询,可以帮助我得到table_2.column_2从TABLE_1 IDS WHERE table_1.column_1和table_1.column_2有相互table_column_3的IDS等于1

感谢

回答

0

做这样的事情: 它使用内部连接从同一个表中获取数据并与其列进行比较。

select * from table_2 
    where column_1 
    in 
    (
     select a.column_1 
     from table_1 a inner join table_1 b on a.column_1=b.column_2 and column_3=1 

    ) 

让我知道它是否有效。

0

我觉得masum7的答案是正确的,除了你可能会需要指定两个a.column_3和b.column_3等于1

我喜欢嵌套查询。如果您不能或不想使用它们,您可以拼合出来,如下面的例子:

select t2.column_2 
from table_1 as t1a, table_1 as t1b, table_2 as t2 
where t1a.column_1 = t1b.column_2 and t1a.column_3 = 1 
and t1a.column_2 = t1b.column_1 and t1b.column_3 = 1 
and t1a.column_1=t2.column_1; 

这句法工作在SQLite的,但可能需要一些调整用于其他数据库。

+0

谢谢我得到它的工作,因为我想。 – Joe 2014-09-23 04:15:42

0

它可以通过多种方式完成。到目前为止,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_1column_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 BYt2.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 

对不起,我错过了出来。 :)