【问题标题】:SQL Insert where Col1 AND Col2 is not foundSQL 插入其中 Col1 AND Col2 未找到
【发布时间】:2020-09-23 02:24:14
【问题描述】:

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

我需要找到一种方法来搜索Col2 <> 1 所在的所有记录 Col1 中的值可以用 Col2 中的其他值表示。 结果应仅显示 Col1 中的值是否从未有 value =1 in Col2 作为记录,然后在表中丢失。

Col1 中的 ID 将作为唯一记录在另一个表中找到,因此我可以创建 join 或类似 table1.Col1=table2.Col2 的内容

最后我需要它来INSERTtable1中的INSERT缺少记录,其中Col1ANDCol2=1中没有带有ID的记录。

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|....|....|

在上表中,我的搜索应该只显示我,并且需要在Col2 中插入1 的那些ID

Table1

|   2|....|....|....|
|   4|....|....|....|

...并省略,因为它们已经是 Col2=1 的记录

Table1

|   1|....|....|....|
|   3|....|....|....|

... 因为 Col1 有一个匹配值,其中 Col2 中的一个 = 1。 我希望这是有道理的。

我需要一个 SELECT 以及一个 INSERT IF NOT EXIST 的示例

在我可以运行插入之前,我需要确保逻辑工作正常,所以我需要一个 SELECT 语句,那里可以显示缺失记录的 Col1 值。

谢谢

雷夫 B.

MS-SQL Server 2016 和 MSSMS 2019

【问题讨论】:

  • 我理解你所说的逻辑,但不清楚你为什么选择你所做的输出集,因为还有其他结果集也可以满足要求。请详细说明。
  • 很遗憾,您的评论无助于解释您的问题。
  • @Scratte Col1=Col1 始终为 true 取决于 SQL 方言。在 Oracle 中,这仅在 Col1 不为空时才成立。
  • @Scratte 所以..您只想添加值 (2,1) 和 (4,1) 因为值 2 和 4 的 col1 没有与 col2 匹配的值 1 ? 正确 您只对添加 col2=1 的行感兴趣? 我也需要插入 ID,但是是的,我已经改写了我的问题,希望现在更清楚了……
  • MS-SQL Server 2016 和 MSSMS 2019 - 我已经用 sql-server-2008 标签更新了帖子,因为我无法添加 sql-server-2016 标签

标签: sql sql-server distinct sql-insert not-exists


【解决方案1】:

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

根据您的第一段,您可以获得适当的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;

【讨论】:

  • 由于某种原因,GROUP BY 出现错误
  • @LeifB。 . . .大概其余的列不是常数。如果您想要来自t1 的其他列,则需要使用聚合函数。
  • 它在你的SELECT我只需要1列的地方。所以当我使用SELECT t1.col1 FROM t1 GROUP BY t1.col1 HAVING SUM(CASE WHEN t1.col2 = 1 THEN 1 ELSE 0 END) = 0; 时,我得到了错误
  • @LeifB。 . . .语法很好:dbfiddle.uk/….
【解决方案2】:

我最终得到了这个解决方案......

/* *** 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)

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多