编辑 重述问题,以澄清... ...
我需要找到一种方法来搜索所有记录,其中包括 Col2 <> 1
价值在 Col1
可以用Col2中的其他值来表示。结果应该只显示在 Col1
从未 value =1 in Col2
作为记录,那么在表中就会丢失。
記錄中的ID Col1
在另一个表中作为唯一记录被发现,所以我可以做一个 join
或作 table1.Col1=table2.Col2
最后,我需要它 INSERT
遗漏记录 在 table1
其中没有ID为的记录 Col1
AND
Col2=1
.
Table2
Col1|Col2|Col3|
---------------
| 1|....|....|
| 2|....|....|
| 3|....|....|
| 4|....|....|
Table1
|Col1|Col2|Col3|Col4|
-------------------
| 1| 1|....|....|
| 1| 2|....|....|
| 1| 3|....|....|
| 2| 3|....|....|
| 2| 4|....|....|
| 2| 5|....|....|
| 3| 1|....|....|
| 3| 2|....|....|
| 4| 2|....|....|
| 4| 3|....|....|
| 4| 4|....|....|
在上面的表格中,我的搜索应该只显示我,它是那些ID的有需要插入一个 1
在 Col2
Table1
| 2|....|....|....|
| 4|....|....|....|
......并离开,因为他们已经记录在案,其中 Col2=1
Table1
| 1|....|....|....|
| 3|....|....|....|
......因为Col1有一个匹配的值,其中一个在Col2=1.我希望它是有意义的。
我需要一个SELECT以及INSERT IF NOT EXIST的例子。
在我运行插入之前,我需要确定逻辑是有效的,所以我需要一个SELECT语句,那里可以显示我的 Col1
丢失记录的值。
谢谢你
Leif B.
MS-SQL Server 2016与MSSMS 2019
你的问题仍然令人困惑。 你有一个引用两个表的查询,但样本数据只显示了一个表。
根据你的第一段,你可以得到相应的 col1
值为。
SELECT t1.col1, . . .
FROM t1
GROUP BY t1.col1
HAVING SUM(CASE WHEN t1.col2 = 1 THEN 1 ELSE 0 END) = 0;
价值: . . .
是用于额外的列。 然后你可以将其插入到另一个表或同一个表中。 也许吧。
INSERT INTO t1 (col1, col2, . . .)
SELECT t1.col1, 0, . . .
FROM t1
GROUP BY t1.col1
HAVING SUM(CASE WHEN t1.col2 = 1 THEN 1 ELSE 0 END) = 0;
我最后用了这个方法...
/* *** The select query *** */
SELECT DISTINCT [Table1].[Col1]
FROM [Table1]
JOIN [Table2] ON [Table1].[Col1] = [Table2].[Col1]
WHERE NOT EXISTS (SELECT [Table1].[Col1], [Table1].[Col2]
FROM [Table1]
WHERE [Table1].[Col1] = [Table2].[Col2] AND [Table1].[Col2] = 1)
/* *** The Insert query *** */
INSERT INTO [Table1]
([Table1].[Col1]
,[Table1].[Col2]
,[Table1].[Col3]
,[Table1].[Col4])
SELECT DISTINCT [Table1].[Col1]
,1
,CURRENT_TIMESTAMP
,0
FROM [Table1]
JOIN [Table2] ON [Table1].[Col1] = [Table2].[Col1]
WHERE NOT EXISTS (SELECT [Table1].[Col1], [Table1].[Col2]
FROM [Table1]
WHERE [Table1].[Col1] = [Table2].[Col2] AND [Table1].[Col2] = 1)