我有下表称为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
输出
尝试一下:
SELECT FkSId
FROM TableA
WHERE FkSId NOT IN (SELECT FkSId FROM TableB WHERE FkLId = 285301) AND FkLId = 28530
问题在这里
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
您需要将FkLId
更改为FkSId
。它将解决您的问题。
SELECT FkSId
FROM TableA
WHERE FkSId NOT IN (SELECT FkSId FROM TableB) AND FkLId = 285301