Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
如何构造此SQL查询?(博士后)_Sql_Postgresql - Fatal编程技术网

如何构造此SQL查询?(博士后)

如何构造此SQL查询?(博士后),sql,postgresql,Sql,Postgresql,我以前从来没有检查过这样的东西,所以我希望你们能帮我。我不确定是否最好创建一个临时表,然后检查其中是否有项目,或者是否有更好的方法 表中的每一行表示一个可能有父对象的对象。父级存储在同一个表中。在本例中,parent_id字段保存行父项的主键。我正在尝试选择表中的所有行,这些行的type列设置为特定值,并且其父行的field_b列中有一个“z”。括号中的部分显然需要修改 SELECT s_id, s_text, s_parent_id FROM sections WHERE s_derived

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

表中的每一行表示一个可能有父对象的对象。父级存储在同一个表中。在本例中,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行,因此良好的性能是非常重要的。

试试看

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