测试行是否存在,如果 InterBase 中不存在则将其插入

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

我正在寻找一种将行插入 InterBase 表中的方法(如果表中尚不存在这些行)。我不能保证 InterBase 表一开始就不为空。

在 SQL Server 中,我可以执行类似于以下脚本示例中的 WHERE NOT EXISTS 的操作,其中无论注释行是否未注释,输出都是相同的。在 SQL Server 中,即使第一个 INSERT INTO 也被注释掉,脚本仍会继续运行。

CREATE TABLE #Table(A VARCHAR(3), B INT, C INT);
INSERT INTO #Table(A, B, C) VALUES ('a1', 1, 11);
--INSERT INTO #Table(A, B, C) VALUES ('a2', 2, 12);

INSERT INTO #Table(A, B, C)
    SELECT 'a2', 2, 12
    WHERE NOT EXISTS (
        SELECT 1
        FROM #Table WHERE A='a2' AND B=2 AND c=12)

SELECT * FROM #Table;

DROP TABLE #Table;

我如何在 InterBase 中做同样的事情?

注意,此脚本中嵌入了第二个问题,因为我知道 InterBase 中“SELECT”的语法需要“FROM”,并且“SELECT 'a2', 2, 12”行中没有“FROM”,我很好奇处理这个问题的最佳方法是来自有 InterBase 经验的人。

delphi c++builder interbase
1个回答
0
投票

在我提出上面的问题后,事实证明它比我的思维路径要容易得多。临时表上的“LEFT JOIN”看起来很有效,获取一行的方法就是使用系统表。像这样的东西:

INSERT INTO Tmp(A, B, C)
    SELECT 'a2', 2, 12
    FROM RDB$DATABASE LEFT JOIN
         Tmp ON Tmp.A='a2' AND Tmp.B=2 AND Tmp.C=12
    WHERE Tmp.B IS NULL
    ROWS 1;
© www.soinside.com 2019 - 2024. All rights reserved.