从uniques以外的多个表中插入一个表

时间:2013-12-25 07:25:42

标签: sql sqlite

假设我有3个名为A,B和C的表

CREATE TABLE IF NOT EXIST A (ID integer primary key);

CREATE TABLE IF NOT EXIST B (ID integer primary key);

CREATE TABLE IF NOT EXIST C (IDA integer,IDB integer);

如果我想确保每个A,B对都有一个C(并且只有一个C)。我该怎么做?

我试过了:

INSERT INTO C(IDA,IDB) SELECT A.ID, B.ID FROM A,B;

它确实从每个A,B对创建一个C.但如果再次运行它将再次创建。如何修改查询,以便在没有C和A和B时创建新的C.

让我说我有一个: A:1,2 B:1,2 C:(1,1),(1,2),(2,1),(2,2) 然后添加B = 3。我想要一个将添加C:(1,3),(2,3)的查询,而不是已经存在于C中的任何对。

3 个答案:

答案 0 :(得分:1)

请尝试此查询。希望它适合你。

INSERT INTO c (ida, idb)
SELECT DISTINCT a.id, b.id
FROM a, b

WHERE NOT EXISTS (SELECT 1 
                  FROM c
                  WHERE c.ida = a.id 
                    AND c.idb = b.id)

答案 1 :(得分:0)

INSERT INTO C(IDA,IDB) 
SELECT DISTINCT A.ID, B.ID
FROM A,B
MINUS
SELECT IDA, IDB
FROM C;

另一种可能的方式,如果A& amp;当笛卡尔连接时,B很小。

答案 2 :(得分:0)

您可以设置表C:

CREATE TABLE IF NOT NOT EXISTS C(IDA整数,IDB整数,UNIQUE(IDA,IDB)ON CONFLICT IGNORE);

SQLite将完成所有工作。