我想构建一个复杂的SQL查询。
表格图片:
首先,我想选择所有条目WHERE column_1和column_2具有相似的id,并且WHERE Column_3等于1.
因此,它应该只返回id:10000001和10000002以及NOT ID:10000003和10000004,因为id 10000004在column_3中有2,因此不是id 10000003的倒数。
其次,一旦从table_1中选择了ids 10000001和10000002,我想从table_2中检索数据。
因此,我希望有一个查询可以帮助我获取table_1.column_2 FROM table中的ids_1 WHERE table_1.column_1 AND table_1.column_2彼此有ID并且table_column_3等于1.
答案 0 :(得分:0)
这样做: 它使用内部联接来从同一个表中提取数据并比较其列。
select * from table_2
where column_1
in
(
select a.column_1
from table_1 a inner join table_1 b on a.column_1=b.column_2 and column_3=1
)
让我知道它是否有效。
答案 1 :(得分:0)
我认为masum7的答案是正确的,除非您可能需要指定a.column_3和b.column_3都等于1.
我喜欢嵌套查询。如果您不能或不想使用它们,您可以像以下示例一样将其展平:
select t2.column_2
from table_1 as t1a, table_1 as t1b, table_2 as t2
where t1a.column_1 = t1b.column_2 and t1a.column_3 = 1
and t1a.column_2 = t1b.column_1 and t1b.column_3 = 1
and t1a.column_1=t2.column_1;
此语法适用于sqlite,但可能需要对其他数据库进行一些调整。
答案 2 :(得分:0)
可以通过多种方式完成。到目前为止,masum7 vai的解决方案似乎是最好的。然而,除此之外,它也可以通过以下方式完成:
SELECT * FROM table_2 as t2
WHERE t2.column_1 IN
(SELECT t1.column_1 FROM table_1 as t1
WHERE t1.column_1 IN (SELECT t1.column_2 FROM table_1 as t1)
AND t1.column_3 = 1)
有点复杂,因为我使用了子查询而不是连接。所以让我解释一下。
第一部分:
SELECT * FROM table_2 as t2
将从table_2
检索所有值。
但话又说回来,根据table_2
的一些特定数据,您需要来自table_1
的一些 SPECIFIC 数据。所以这里有WHERE
子句和用于从table_1
检索数据的子查询。
第二部分:
WHERE t2.column_1 IN
(SELECT t1.column_1 FROM table_1 as t1
WHERE t1.column_1 IN (SELECT t1.column_2 FROM table_1 as t1)
AND t1.column_3 = 1)
可以分解为更多的子部分。
子部分 - 1:
SELECT t1.column_1 FROM table_1 as t1
将检索column_1
table_1
的所有值。
但是,那不是你想要的。您想要特定:
一个。 column_1
中存在column_2
的{{1}}值
湾同时,column_1
值为column_3
的{{1}}值。
基于这两点,来自第2部分。
子部分 - 2:
WHERE t1.column_1 IN (SELECT t1.column_2 FROM table_1 as t1)
AND t1.column_3 = 1)
第一个WHERE
条件表示column_1
值必须存在于嵌套子查询中,该子查询具有所有column_2
值。第二个说,相应的column_3
值必须为1.
希望此查询检索您的预期结果,并且您了解我对查询的解释。祝你好运,祝你有愉快的一天!祝你在StackOverflow中旅途愉快。 :)
修改-1 强>:
只是查询的一小部分内容。我忘了添加GROUP BY
条款。它应该是GROUP BY
t2.column_1
。
因此修改后的查询变为:
SELECT * FROM table_2 as t2
WHERE t2.column_1 IN
(SELECT t1.column_1 FROM table_1 as t1
WHERE t1.column_1 IN (SELECT t1.column_2 FROM table_1 as t1)
AND t1.column_3 = 1)
GROUP BY t2.column_1
抱歉,我错过了。 :)