2013-12-10 69 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'); 
相关问题