2013-10-22 61 views
-2

的有以下2表2:SQL查詢來加入2臺高效

Table1(col1 integer, col2) 
    1  "This is a string" 
    2  "This is another string" 
    5  "This is yet another string" 
    3  "a" 
    4  "b" 
    6  "Some other string" 

    Table2(col3 integer, col4 integer, col5 integer) 
    1 2 5 
    3 4 6 

現在我想從表2發現所有的值,其中COL4 = 2。這給了我col3 = 1和col5 = 5。現在我想與Table1一起加入這個結果,以便獲得與這些整數對應的字符串值(col2)。

就是我想要的結果爲:

select d1.col2, d2.col2 
from Table1 d1, Table1 d2 
where (select col3, col5 from Table2 where col4=0); 

:「這是一個字符串」,「這又是一個字符串」

SQL查詢我在PostgreSQL的寫在下面給出但是,上面的查詢給我錯誤。有人可以幫助我爲此寫一個有效的查詢。

+0

所以你想你的結果作爲一行與兩列或兩列與列? –

回答

0

嘗試,因爲工會

select col2 from table1 where col1 in (
select col3 from table2 where col4 = 2 
union 
select col5 from table2 where col4 = 2 
) 
2

你可以使用一個INNER JOIN與ON子句兩個條件:

SELECT Table1.* 
FROM 
    Table1 INNER JOIN Table2 
    ON Table1.col1 = Table2.col3 OR Table1.col1 = Table2.col5 
WHERE 
    Table2.col4=2 

請參閱小提琴here

0

嘗試

SELECT t2.col2, t3.col2 
FROM Table1 AS t1 
INNER JOIN Table2 AS t2 ON t1.col1 = t2.col3 
INNER JOIN Table2 AS t3 ON t1.col1 = t2.col5 
WHERE t1.col4 = 2 
+0

嗯 - 我的回答在我發佈時已經被標記了。這怎麼可能呢? – PJW

+0

不知道你爲什麼得到downvote,這個看起來只是在頁面上的正確答案。通過創建sqlfiddle.com示例並添加鏈接,可以使其更好。啊,你必須改變加入標準,現在不正確,那麼你會得到我的贊成:) –

+1

@RomanPekar另外兩個舊的答案也是正確的 –

0

,如果你想你的結果爲兩排,一列:

select t1.col2 
from Table2 as t2 
    inner join Table1 as t1 on t1.col1 in (t2.col3, t2.col5) 
where t2.col4 = 2; 

-- output 
-- 'This is a string' 
-- 'This is yet another string' 

,如果你希望你的結果作爲一個行有兩列:

select t13.col2, t15.col2 
from Table2 as t2 
    inner join Table1 as t13 on t13.col1 = t2.col3 
    inner join Table1 as t15 on t15.col1 = t2.col5 
where t2.col4 = 2 

-- output 
-- 'This is a string', 'This is yet another string' 

sql fiddle demo