假设我有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中的任何对。
答案 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将完成所有工作。