2つのテーブル:
== customers ==
cust_id
== attachments ==
att_id
cust_id
1人の顧客->多くの添付ファイル
すべての顧客を取得し、ブール仮想フィールド「has_attach」を追加して選択し、顧客が添付ファイルを持っているかどうかを確認します。
GROUP BYなしで、これが可能であれば:-)
2つのテーブル:
== 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
実際にはすべてのレコードを読み取るわけではないためです。レコードが存在するかどうかをチェックするだけです。
実際、インデックスを使用する場合、これはテーブルからレコードを読み取ることさえしません。インデックスが一致するレコードを指していることを確認し、そこで停止します。
これを試して
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
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の何かです