SQL Server SELECT其中值等于另一个选择的结果

时间:2013-12-10 22:08:06

标签: sql-server tsql postgresql

我想创建一个SQL语句,根据另一个表中的值从一个表中选择值。 我想知道如何在SQL中这样做,但在PostgreSQL中了解也会很好。

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 个答案:

答案 0 :(得分:6)

你很接近......试试这个:

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

编辑:开始添加INNER JOIN选项,但它在下面的另一个答案中列出。

答案 1 :(得分:3)

使用IN不等于:

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

答案 2 :(得分:2)

你为什么不进行INNER JOIN?

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

答案 3 :(得分: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 */);

答案 4 :(得分: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');