2013-12-10 122 views
2

我想創建一個SQL語句,以從一個表中選擇基於另一個表中的值。 我想知道如何在SQL中這樣做,但在PostgreSQL中知道也會很好。SQL Server SELECT其中值等於另一個選擇的結果

EX:

TableA 
ID | Label | Value 
1 Test A 


TableB 
ID | Name | Label 
1 TestN Test 

我想查詢將看起來是這樣的:

SELECT Name FROM TableB WHERE Label = SELECT Label FROM TableA WHERE Value = 'A'; 

那一個,雖然拋出錯誤。思考?

回答

5

你靠近...試試這個:

SELECT Name FROM TableB WHERE Label IN (SELECT Label FROM TableA WHERE Value = 'A'); 

編輯:開始添加INNER JOIN選項,但它是在下面的另一個回答中列出。

2

你爲什麼不做INNER JOIN?

SELECT DISTINCT B.Name 
FROM TableB B 
INNER JOIN TableA A ON B.Label = A.Label 
WHERE A.Value = 'A' 
+1

如果表A有兩行具有相同的標籤,這將重複的行在表B –

+0

@JohnGibb感謝您指出。 –

3

使用IN不等於:

select Name 
from TableB 
where Label in (SELECT Label FROM TableA WHERE Value = 'A'); 
1

我不是在生產代碼 「IN」 子句的大風扇。別人會不同意,我明白了。

存在和不存在....

SELECT Name FROM TableB tabB WHERE 
exists (select null from TableA innerAAlias WHERE innerAAlias.Value = 'A' /* filter */ and innerAAlias.Label = tabB.Label /* relationship to the outside query */); 
1

使用TSQL - > EXISTS ...

SELECT b.name 
FROM Table B AS b 
WHERE EXISTS 
(SELECT * 
    FROM TableA a 
    WHERE b.label = a.label 
    AND a.value = 'A'); 
相關問題