该SQL查询应该如何构造? (Postgres的)

时间:2013-02-16 23:05:49

标签: sql postgresql

我以前从来没有检查过这样的事情,所以我希望你们都能提供帮助。我不确定是否最好创建一个临时表,然后检查项目是否在其中或是否有更好的方法。

表中的每一行代表一个可能有父项的对象。父级存储在同一个表中。在此示例中,parent_id字段包含行的父级的主键。我正在尝试选择表中的所有行,其中type列设置为特定值,其父行在field_b列中具有“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行的100k行,所以体面的表现并非易事。

2 个答案:

答案 0 :(得分:2)

SELECT key_field, field_a 
FROM
    t s
    inner join
    t p on p.key_field = s.key_field
WHERE
    s.type = 1
    AND p.field_b LIKE '%z%'

答案 1 :(得分:1)

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%'