SQL where子句依赖于其他表

时间:2016-04-11 00:19:53

标签: sql sql-server

我认为更容易解释一个例子。所以这是我的桌子

Table A 
id | Name
1  | row1
2  | row2
3  | row3

Table B
id | A_id | date 
1  | 1    |  NULL
2  | 1    |  NULL
3  | 2    |  2016-04-01
4  | 2    |  2016-04-01
5  | 3    |  2016-04-01
6  | 3    |  NULL

我想要完成的是我在表A上的选择只会返回值,如果与表A相关的表B上的行具有空日期,至少有一个。

Select * from Table_A Where (?)

这是否可以使用?我只会得到row1和row3,可以吗?

2 个答案:

答案 0 :(得分:2)

您可以使用EXISTS

SELECT *
FROM TableA a
WHERE EXISTS(
    SELECT 1
    FROM TableB b
    WHERE
        b.A_id = a.id
        AND b.date IS NULL
)

答案 1 :(得分:0)

SELECT *
FROM TableA a
WHERE ID IN (SELECT ID_A
    FROM TableB
    WHERE date IS NULL
)

子查询会在空日期上检索ID,而这些ID又会传递给主查询以获得您想要的内容