sql - 具有 NOT IN 和 WHERE 关系的 SQL 查询与 GUID
问题描述
有两个表Document
和DocumentPos
。在Document
there is columnGUID
和 in DocumentPos
is columnDocumentGUID
是指 table Document
。
我想让每一行都在
DocumentPos
它DocumentGUID
现在所在的行中Documents'
GUID
。
我有这个返回 0 行的查询:
select *
FROM Document d,
DocumentPos dp
WHERE d.GUID = dp.DocumentGUID
AND dp.DocumentGUID NOT IN (
SELECT d.GUID
FROM Document
)
但是,当我执行select * from documentpos
它时,它会返回例如带有DocumentGUID
=的行B479BCB72334424DAC1B7CC26880DAB8
。这DocumentGUID
是NOT IN
作为. Document
_GUID
但select * from Document where GUID = 'B479BCB72334424DAC1B7CC26880DAB8'
返回 0 行。
我想像这样构建查询,因为它应该成为一个DELETE
语句:
DELETE dp
FROM Document d,
DocumentPos dp
WHERE d.GUID = cp.DocmentGUID
AND dp.DocumentGUID NOT IN (
SELECT d.GUID
FROM Document
)
第二个问题我也想知道:
为什么括号中
FROM d
不可能而且只有FROM Document
?
解决方案
NOT IN
s很棘手NULL
。您可以改用NOT EXISTS
它,它是 null 安全的。另外,我看不出为什么需要document
在外部查询中引入表。
我认为你想要:
select *
from documentpos dp
where not exists (
select 1 from document d where d.guid = dp.documentguid
)
您可以将其转换为删除语句,如下所示:
delete dp
from documentpos dp
where not exists (
select 1 from document d where d.guid = dp.documentguid
)
推荐阅读
- javascript - javascript - 如何使这个数组工作?
- python - 如何在 python 中将我的文本文件分割成段落?
- numpy-ndarray - 用 (-1,1) 重塑 numpy 中的数据。这是什么意思?
- c# - 有没有办法在 Uri 中为 HttpClient 发送转义句点字符
- java - 为什么 Android Virtual Device 没有运行我的项目?
- sql - 根据一个字段是否有任何 0 将 Groups 分成 3 个桶
- python-3.x - OneVsRestClassifier 能否用于在 Python Scikit-Learn 中生成单独的二元分类器模型?
- azure - 更新多个资源的 Azure 资源标签
- sql-server - SqlClient.SqlException - 附近的语法不正确
- c# - 需要找到一种方法将我的运输承运商与我的运输成本在同一行中列出