如何构造此SQL查询?(博士后)
我以前从来没有检查过这样的东西,所以我希望你们能帮我。我不确定是否最好创建一个临时表,然后检查其中是否有项目,或者是否有更好的方法 表中的每一行表示一个可能有父对象的对象。父级存储在同一个表中。在本例中,parent_id字段保存行父项的主键。我正在尝试选择表中的所有行,这些行的type列设置为特定值,并且其父行的field_b列中有一个“z”。括号中的部分显然需要修改如何构造此SQL查询?(博士后),sql,postgresql,Sql,Postgresql,我以前从来没有检查过这样的东西,所以我希望你们能帮我。我不确定是否最好创建一个临时表,然后检查其中是否有项目,或者是否有更好的方法 表中的每一行表示一个可能有父对象的对象。父级存储在同一个表中。在本例中,parent_id字段保存行父项的主键。我正在尝试选择表中的所有行,这些行的type列设置为特定值,并且其父行的field_b列中有一个“z”。括号中的部分显然需要修改 SELECT s_id, s_text, s_parent_id FROM sections WHERE s_derived
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行,因此良好的性能是非常重要的。试试看
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%')
或
试一试
或
提供模式和一小组示例数据:parent_id字段保存行的父项的主键。这是EAV的一种形式,还是只是解释得很笨拙?我相信你只是想要一个像表1中的c一样的自连接,将表1中的p作为c.parent\u id=p.id连接,但我今天没有猜测的心情。这可能是对的。我还没有发布完整的模式,但我希望能更清楚地说明我的问题。是否只有一个直接的父项-1个子项到1个父项-或者您正在寻找递归选项?非递归。谢谢大家的快速帮助!把桌子连在一起就成功了。过去我对表进行了很多联接,但不幸的是,我没有想到将表本身联接起来。请提供模式和一小部分示例数据:parent_id字段包含行的父项的主键。这是EAV的一种形式,还是只是解释得很笨拙?我相信你只是想要一个像表1中的c一样的自连接,将表1中的p作为c.parent\u id=p.id连接,但我今天没有猜测的心情。这可能是对的。我还没有发布完整的模式,但我希望能更清楚地说明我的问题。是否只有一个直接的父项-1个子项到1个父项-或者您正在寻找递归选项?非递归。谢谢大家的快速帮助!把桌子连在一起就成功了。过去我在表上做过很多连接,但不幸的是,我没有想到要将表本身连接起来,这对于子查询来说是一个不错的例子。谢谢,这是一个很好的子查询案例。谢谢你。
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%'
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%'