Sql JOIN单独作用于两个表,但在一起使用时不起作用

Sql JOIN单独作用于两个表,但在一起使用时不起作用,sql,postgresql,join,postgresql-8.4,Sql,Postgresql,Join,Postgresql 8.4,编辑:没关系,想出来了,如果你有兴趣,回答下面的问题 使用Postgresql 8.4 以下是我需要运行的查询的格式(名称和面已被更改以保护我的妄想症。如果需要,可以提供它们,但这是我查询的直接副本,可以简单地替换架构、表和列名): 。。。基本上,当标准与我在父表中提供的数据匹配时,以及在请求的时间段内子表中至少有一个相关事务时,我需要字段。如果在子项\u当前\u状态视图中有数量,我们也需要这些数量 t1.字段可以被视为与数字键t4.标准相当的可读性 我的问题是,所提供的查询无法提供来自chil

编辑:没关系,想出来了,如果你有兴趣,回答下面的问题

使用Postgresql 8.4

以下是我需要运行的查询的格式(名称和面已被更改以保护我的妄想症。如果需要,可以提供它们,但这是我查询的直接副本,可以简单地替换架构、表和列名):

。。。基本上,当
标准
与我在
父表
中提供的数据匹配时,以及在请求的时间段内
子表
中至少有一个相关事务时,我需要
字段
。如果在
子项\u当前\u状态
视图中有数量,我们也需要这些数量

t1.字段
可以被视为与数字键t4.标准相当的可读性

我的问题是,所提供的查询无法提供来自
child\u current\u status
的数量数据,即使其中有数据

编辑:为了澄清,上面的查询返回
字段,空
,应该返回
字段,当前数量

问题与
t2
子查询有关,因为当我将其更改为
左连接时,它会返回相关的数量数据:

SELECT
    t1.field,
    SUM(v3.quantity) as current_qty
FROM
    schema1.child_table t1
        LEFT JOIN (SELECT DISTINCT t1key FROM schema2.child_transaction t2 WHERE datefield BETWEEN '2012-04-01' AND '2012-04-19') t2 USING (t1key)
        LEFT JOIN schema1.child_current_status v3 ON t1.t1key = v3.t1key
        JOIN schema1.parent_table t4 ON t1.t4key = t4.t4key
WHERE
    t4.criteria = 763
GROUP BY
    t1.field
编辑:此修改后的查询返回当前数量的
字段,但无论请求的时间段内是否有
子交易
中的交易,都将返回该字段

。。。我所做的只是将第一个联接转换为左联接,然后查询返回
child\u current\u status
中的相关数量。如果我将
child\u current\u status
更改为内部联接,则查询不会返回任何结果。将第一个联接设为左联接的问题是,我需要它仅在子查询返回数据时才返回结果,在本例中,在请求的时间段内返回数据

为了使水变得浑浊,它在某些
t4中正常工作。标准
,763只是它失败的一个标准

我错过了什么


简短版本:根据上面的第一个查询,当第一个连接是内部连接时,它会导致左连接不返回任何内容。当它是左连接时,
child\u current\u status
上的左连接返回正确的数据,但这否定了第一次连接的目的


编辑:我已经尝试将左连接移动到FROM子句的末尾,在内部连接后面,没有任何更改

呃,没关系,我发现,查询工作正常,这里没有足够的数据供其他人使用。基本上,
child\u表中的一个子项有一个事务
,而
child\u表中的其他子项也有当前数量。因此,该查询适当地指出,在指定的父项的指定时间内,没有任何子项的当前数量

出现这个问题是因为在处理这个查询的结果时,我返回并要求提供与所有子项相关的当前数据(而不是像我应该拥有的那样,只有那些具有相关事务的子项),并且即使这个查询(正确地)告诉我没有子项,也获得了信息


这里没什么可看的,请继续。

也许你应该把你的答案勾选为已被接受,这样人们就不会在这个问题上绊倒,结果却发现这里没什么可看的。啊,我明白了,对不起。我知道有时间限制,只是不知道等待时间有那么长。
SELECT
    t1.field,
    SUM(v3.quantity) as current_qty
FROM
    schema1.child_table t1
        LEFT JOIN (SELECT DISTINCT t1key FROM schema2.child_transaction t2 WHERE datefield BETWEEN '2012-04-01' AND '2012-04-19') t2 USING (t1key)
        LEFT JOIN schema1.child_current_status v3 ON t1.t1key = v3.t1key
        JOIN schema1.parent_table t4 ON t1.t4key = t4.t4key
WHERE
    t4.criteria = 763
GROUP BY
    t1.field