可能重复:
SQL - find records from one table which don't exist in another
我有这张桌子
TableA
uID | uData
1 | 111
2 | 222
3 | 333
4 | 444
5 | 555
Table B
uID | uData2
1 | 222
2 | 444
我想要的只是从TableA中获取数据,而不是来自TableB的数据
输出:
uID | uData
1 | 111
3 | 333
5 | 555
到目前为止,我做了这个解决方案
DECLARE allData CURSOR FOR
SELECT uData
FROM TableA;
OPEN allData;
FETCH NEXT FROM allData;
print @allData;
--WHILE @@allData = '222'
-- BEGIN
-- FETCH NEXT FROM allData;
-- END
CLOSE allData;
DEALLOCATE allData;
GO
并收到此错误
必须声明标量变量“@allData”。
有没有其他方法可以在sql或任何其他解决方案中使用while而不执行此操作? :)
答案 0 :(得分:3)
试试这个
SELECT *
FROM TableA
WHERE uData NOT IN (
SELECT uData2
FROM TableB
)
答案 1 :(得分:2)
只需使用左连接并过滤掉第二个表中有数据的记录:
select t1.uID, t1.uData
from TableA t1
left join TableB t2 on t2.uData2 = t1.uData
where t2.uData2 is null
答案 2 :(得分:1)
不需要光标;只需使用以下方法从TableB中删除值:
select tableA.*
from tableA
where tableA.uData not in (select TableB.uData2 from TableB)
此外,CURSOR
的语法错误。请查看this quick example以获取正确的CURSOR
语法以供将来参考。
答案 3 :(得分:0)
使用此查询:
SELECT * FROM tableA
LEFT JOIN tableB ON tableA.Uid = tableB.Uid
WHERE tableB.Uid IS NULL