检查至少存在一条记录

时间:2012-11-08 13:13:22

标签: sql database postgresql

两个表:

== customers ==
cust_id

== attachments ==
att_id
cust_id

1位客户 - >许多附件

我会检索所有的客户,并添加布尔虚拟字段“has_attach”来选择,知道客户是否有附件。

没有GROUP BY,如果可能的话: - )

3 个答案:

答案 0 :(得分:1)

根据many的真实含义,COUNT(*)选项会带来不必要的负担。

在这种情况下,以下有时可以产生效益。

SELECT
  *,
  CASE WHEN EXISTS (SELECT *
                      FROM attachments
                     WHERE cust_id = customers.cust_id)
       THEN 1
       ELSE 0 END  AS has_attach
FROM
  customers

这是因为EXISTS实际上并未读取所有记录。它只检查任何记录是否存在。

事实上,当使用索引时,它甚至不会从表中读取任何记录。它只是检查索引是否指向任何匹配的记录并停在那里。

答案 1 :(得分:0)

SELECT 
    customers .cust_id,
    IFNULL(count , 0) as Total
FROM customers 
LEFT JOIN 
    (
        SELECT att_id , count(*) as count
        FROM attachments group by cust_id
    ) AS att on att.cust_id = customers.cust_id

这是MySQL中的内容

答案 2 :(得分:0)

试试这个

update customers set field='has attach' 
where cust_id in (select c.cust_id cusotmer c
inner join attachment a on c.cust_id=a.cust_id 
having count(a.id)>1