Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite检查子查询是否给出与其他子查询相同的答案_Sql_Sqlite - Fatal编程技术网

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))
(如果您有必要的索引,第二个查询可能会更有效。)