SQL Insert where Col1 AND Col2 is not found.

问题描述 投票:0回答:1

编辑 重述问题,以澄清... ...

我需要找到一种方法来搜索所有记录,其中包括 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的有需要插入一个 1Col2

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

sql sql-server-2008 distinct sql-insert not-exists
1个回答
0
投票

你的问题仍然令人困惑。 你有一个引用两个表的查询,但样本数据只显示了一个表。

根据你的第一段,你可以得到相应的 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;

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)
© www.soinside.com 2019 - 2024. All rights reserved.