SQLite检查子查询是否给出与其他子查询相同的答案
我需要这样构造查询:SQLite检查子查询是否给出与其他子查询相同的答案,sql,sqlite,Sql,Sqlite,我需要这样构造查询: SELECT * FROM table1 AS t1 WHERE ( (SELECT column2 FROM table1 WHERE column1=t1.column1)!=(SELECT column2 FROM table1 WHERE column1=1) ) 但问题是SQLite只检查子查询的第一个结果 我的意思是,如果从表1中选择column2,其中column1=t1。column1给出以下结果:(1,2,3)和从表1中选择column2,其中c
SELECT * FROM table1 AS t1 WHERE (
(SELECT column2 FROM table1 WHERE column1=t1.column1)!=(SELECT column2 FROM table1 WHERE column1=1)
)
但问题是SQLite只检查子查询的第一个结果
我的意思是,如果从表1中选择column2,其中column1=t1。column1
给出以下结果:(1,2,3)
和从表1中选择column2,其中column1=1
给出(1,2,3,4)
SQLite将只检查1=1
,而不是(1,2,3)=(1,2,3,4)
我需要过滤前两个查询只给出相同行的行(即第一个查询中的(1,2,3)
,第二个查询中的(1,2,3)
)
我的表格示例:
id | column1 | column2 | ...
1 | 1 | 1 | ...
2 | 1 | 2 | ...
3 | 1 | 3 | ...
4 | 2 | 1 | ...
5 | 2 | 2 | ...
6 | 2 | 3 | ...
7 | 2 | 4 | ...
8 | 3 | 1 | ...
9 | 3 | 2 | ...
10 | 3 | 3 | ...
我需要从id=4
到id=7
获取行,因为它有7 | 2 | 4 |
行(对于一个column1值,没有与column1中相同的column2值)您可以尝试:将子查询彼此相减,然后检查是否有任何行剩余:
SELECT *
FROM table1 AS t1
WHERE EXISTS (SELECT column2 FROM table1 WHERE column1=t1.column1
EXCEPT
SELECT column2 FROM table1 WHERE column1=1)
OR EXISTS (SELECT column2 FROM table1 WHERE column1=1
EXCEPT
SELECT column2 FROM table1 WHERE column1=t1.column1)
或者,对单个行执行类似的操作:如果某一行在另一个子查询中没有对应的行,则子查询不同:
SELECT *
FROM table1 AS t1
WHERE EXISTS (SELECT column2
FROM table1 AS t2
WHERE column1 = t1.column1
AND NOT EXISTS (SELECT 1
FROM table1 AS t3
WHERE column2 = t2.column2
AND column1 = 1))
OR EXISTS (SELECT column2
FROM table1 AS t2
WHERE column1 = 1
AND NOT EXISTS (SELECT 1
FROM table1 AS t3
WHERE column2 = t2.column2
AND column1 = t1.column1))
(如果您有必要的索引,第二个查询可能会更有效。)