两张表:
== customers ==
cust_id
== attachments ==
att_id
cust_id
1 位客户 -> 许多附件
我会检索所有客户,并添加布尔虚拟字段“has_attach”来选择,了解客户是否有附件。
没有 GROUP BY,如果这是可能的 :-)
两张表:
== customers ==
cust_id
== attachments ==
att_id
cust_id
1 位客户 -> 许多附件
我会检索所有客户,并添加布尔虚拟字段“has_attach”来选择,了解客户是否有附件。
没有 GROUP BY,如果这是可能的 :-)
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
实际上并没有读取所有记录。它只是检查是否存在任何记录。
事实上,当使用索引时,它甚至不会从表中读取任何记录。它只是检查索引是否指向任何匹配的记录并停在那里。
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 中的东西
尝试这个
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