我以前从来没有检查过这样的东西,所以我希望你们能帮忙。我不确定是否最好创建一个临时表,然后检查其中是否有项目,或者是否有更好的方法。
表中的每一行表示一个可能有父级的对象。父项存储在同一个表中。在本例中,parent_id字段保存行父项的主键。我正在尝试选择表中的所有行,这些行的type列设置为特定值,而其父行的field列中有一个'z'。括号中的部分显然需要工作。。。
SELECT s_id, s_text, s_parent_id
FROM sections
WHERE s_derivedtype >= 10000 AND
如果这有什么回报
SELECT s_id
FROM sections
WHERE s_id = {the s_parent_id from the first query) AND s_flags LIKE '%z%'
我已经更新了这个希望更容易阅读。。。
最有效的方法是什么?我期望从表中18m返回大约10万行,因此良好的性能是非常重要的。
最佳答案
尝试
SELECT t1.key_field, t1.field_a
FROM tbl AS t1
WHERE t1.type = 1 AND parent_id = (SELECT t2.id FROM tbl AS t2
WHERE t2.id = t1.parent_id
AND t2.field_b LIKE '%z%')
或
SELECT t1.key_field, t1.field_a
FROM tbl AS t1
INNER JOIN tbl AS t2 ON t2.id = t1.parent_id
WHERE t1.type = 1
AND t2.field_b LIKE '%z%'
关于sql - 该SQL查询应如何构造? (Postgres),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14916131/