0

我有一个复杂的 SQLite 查询,我可以使用一些帮助来制作。我有 5 张桌子,每张桌子有 3 列。表 1 到 4 的 col3 是表 5 col1 的外键。

我需要在表 1 到 4 中选择 col3 的不同值,如果 table5 的 col1 不在选择结果中,则删除 table5 的 col1。

Table1
col1   col2   col3
a        b      1
c        d      2
e        f      1

Table2
col1   col2   col3
g       h      2
i       j      3
k       l      4
m       n      2

Table3
col1   col2   col3
b       a      4
d       c      3
o       p      8
q       r      1

Table4
col1   col2   col3
s       t      2
u       v      3
w       x      4

Table5
col1   col2   col3
1      aa      bb
2      cc      dd
3      ee      ff
4      gg      hh
5      ii      jj
6      kk      ll
7      mm      nn
8      oo      pp

表 1 到表 4 的不同集合是。1 2 3 4 8

从 table5 中删除的记录将是 5 6 7

据我所知,正在使用此代码收集选择集...

SELECT [table1].[col3], 1 as tablenumber
FROM [table1]
GROUP BY [table1].[col3_ID]
UNION ALL
SELECT [table2].[col3_ID], 2 as tablenumber
FROM [table2]
GROUP BY [table2].[col3_ID]
UNION ALL
SELECT [table3].[col3], 3 as tablenumber
FROM [table3]
GROUP BY [table3].[col3]
UNION ALL
SELECT [table4].[col3], 4 as tablenumber
FROM [table4]
GROUP BY [table4].[col3]
UNION ALL

我想在同一操作中从 table5 中删除记录。

4

2 回答 2

1

这是一种获取要删除的 id 列表的方法:

select *
from table5
where col1 not in (select col3 from table1 union
                   select col3 from table2 union
                   select col3 from table3 union
                   select col3 from table4
                 );

以下delete应该可以实际删除它们:

delete from table5
where col1 not in (select col3 from table1 union
                   select col3 from table2 union
                   select col3 from table3 union
                   select col3 from table4
                 );

是一个 SQL Fiddle 来展示它们的实际操作。

(最初的答案是不正确的。其中一个原因是 . 中的子查询周围有额外的括号union。)

于 2013-09-12T12:57:38.893 回答
0

您不能在同一操作中删除记录并将记录返回到您的应用程序。您必须执行两条语句:

DELETE FROM Table5
WHERE col1 NOT IN (SELECT col3 FROM Table1 UNION
                   SELECT col3 FROM Table2 UNION
                   SELECT col3 FROM Table3 UNION
                   SELECT col3 FROM Table4);

SELECT col3 FROM Table1 UNION
SELECT col3 FROM Table2 UNION
SELECT col3 FROM Table3 UNION
SELECT col3 FROM Table4;

如果您希望它们是原子的,请将它们包装到一个事务中。

于 2013-09-12T14:33:51.463 回答