关于WHERE EXISTS中的子查询的问题(...)

时间:2013-10-24 03:18:08

标签: sql postgresql

我对本教程页面中的这个示例感到困惑。 http://www.postgresqltutorial.com/postgresql-subquery/

SELECT
    first_name,
    last_name
FROM
    customer
WHERE
    EXISTS (
        SELECT
            1
        FROM
            payment
        WHERE
            payment.customer_id = payment.customer_id
    );

你能告诉我子查询的要点吗?

我理解,如果从子查询返回至少一个结果,EXISTS会将结果集转换为布尔值“true”。但是在子查询的WHERE子句中,它看起来总是“真”,因此总是会选择一行,因此EXISTS将始终为“true”。

这个例子是否意味着在子查询中执行此操作?

WHERE
    customer.customer_id = payment.customer_id

此外,我假设作为WHERE一部分的子查询将为每个“客户”运行一次。是吗?

感谢。

1 个答案:

答案 0 :(得分:4)

你是对的。这似乎是PostgreSQL文档中的一个拼写错误......顺便说一下,这是一个令人困惑的问题。

关于最后一个问题,考虑为每个客户运行它也是一个很好的方法。