兩個表:檢查至少一個記錄存在
== customers ==
cust_id
== attachments ==
att_id
cust_id
1的客戶 - >許多附件
我會檢索所有custmers,並在加入布爾虛擬域「has_attach」選擇,知道客戶有附件。
沒有GROUP BY,如果這是不可能性:-)
兩個表:檢查至少一個記錄存在
== customers ==
cust_id
== attachments ==
att_id
cust_id
1的客戶 - >許多附件
我會檢索所有custmers,並在加入布爾虛擬域「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
謝謝SRIRAM,但你的sql只檢索至少有一個附件的客戶。 – Roberto
opss!也許我的問題不是很清楚。我改變了它:-) – Roberto
@Roberto將要添加的布爾值「has_attach」添加到哪列中,因此您應該在customers表中添加一列 – SRIRAM