仅当表中不存在两个 id 的组合时才将值插入表中
Posted
技术标签:
【中文标题】仅当表中不存在两个 id 的组合时才将值插入表中【英文标题】:Insert values into table only if a combination of two id's don't already exist in the table 【发布时间】:2017-01-12 16:34:10 【问题描述】:我想在表格中插入一堆列信息。
例如
INSERT INTO TABLE
(AID, BID, CID, INT)
SELECT AID, BID, CID
FROM ANOTHERTABLE
WHERE X
我想在我的插入中添加一个子句:仅当 AID 和 BID 不存在于同一行时才插入。
我无法执行where != AID
,因为 AID 存在于不同的行中,同一行具有不同的 BID。
不过,我确实需要保留 AIB 和 BID 的一种组合。
因此我只是不想在同一行上重复 AIB 和 BID 行。
我试过 where rowA != AID AND rowB != BID
但这意味着表中不存在 AID 和 BID 的第一行。我只需要 AID 和 BID 的一种组合。
【问题讨论】:
查看WHERE NOT EXISTS
那么 AID 和 BID 形成一个复合键?
不是真的,我只有一个界面,它通过 AID 和另一个属性向用户显示,例如在 BID 中完成的培训,我不希望这些在我的界面中重复。
查看这个答案:***.com/a/29688738/122139
【参考方案1】:
此解决方案使用WHERE EXISTS NOT()
检查目标表中的两个值。
如果 AID 或 BID 可以具有 NULL 值,则应使用 ISNULL()
处理。
INSERT INTO TABLE
(AID, BID, CID, INT)
SELECT
AID, BID, CID -- problem here - where is value for INT?
FROM ANOTHERTABLE
WHERE NOT EXISTS
(
SELECT
AID, BID
FROM TABLE
-- WHERE TABLE.AID & BID ... Wrong (thank you Gareth Lyons)
WHERE TABLE.AID = ANOTHERTABLE.AID
AND TABLE.BID = ANOTHERTABLE.BID
)
【讨论】:
& 不是 SQL Server 中的连接运算符,而是按位比较。所以它会在字符串上失败并在数字数据上给出不正确的答案。也没有给出数据类型,所以你不知道串联会起作用。连接也有其他问题,例如可能排除使用适当的索引。请改用 TABLE.AID = ANOTHERTABLE.AID AND TABLE.BID = ANOTHERTABLE.BID。以上是关于仅当表中不存在两个 id 的组合时才将值插入表中的主要内容,如果未能解决你的问题,请参考以下文章