获取ID在另一个表中不存在

问题描述 投票:0回答:3

我有下表称为TableA

+-----------+--------+--------+
| RequestId | FkLId  | FkSId  |
+-----------+--------+--------+
| 100       | 285301 | 110    |
+-----------+--------+--------+
| 200       | 285301 | 99     |
+-----------+--------+--------+
| 300       | 285301 | 100    |
+-----------+--------+--------+
| 400       | 285301 | 98     |
+-----------+--------+--------+
| 500       | 285301 | 93     |
+-----------+--------+--------+
| 600       | 285302 | 93     |
+-----------+--------+--------+
| 700       | 285302 | 94     |
+-----------+--------+--------+

还有另一个名为TableB的表

+-----------+--------+-------+
| ServiceId | FkLId  | FkSId |
+-----------+--------+-------+
| 500       | 285301 | 109   |
+-----------+--------+-------+
| 501       | 285301 | 99    |
+-----------+--------+-------+

我需要获取表A中的所有ID,而表B中不存在。我的查询如下,

SELECT FkSId
FROM   TableA 
WHERE  FkLId NOT IN (SELECT FkSId FROM TableB) AND FkLId = 285301

但是它只返回110我需要110,100,98,93输出

sql-server join select sql-server-2016
3个回答
2
投票

尝试一下:

SELECT FkSId
FROM   TableA 
WHERE  FkSId NOT IN (SELECT FkSId FROM TableB WHERE FkLId = 285301) AND FkLId = 28530

1
投票

Demo on db<>fiddle

问题在这里

WHERE FkSId NOT IN (SELECT FkSId FROM TableB where FkLId = 285301)

您应该像下面那样从FkLId更改为FkSId

SELECT FkSId 
FROM TableA 
WHERE FkSId NOT IN (SELECT FkSId FROM TableB where FkLId = 285301) AND FkLId = 285301 

输出

FkSId
110
100
98
93

0
投票

您需要将FkLId更改为FkSId。它将解决您的问题。

  SELECT FkSId
    FROM   TableA 
    WHERE  FkSId NOT IN (SELECT FkSId FROM TableB) AND FkLId = 285301
© www.soinside.com 2019 - 2024. All rights reserved.