2014-09-23 92 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 

對不起,我錯過了出來。 :)