1

2つのテーブル:

== customers ==
cust_id

== attachments ==
att_id
cust_id

1人の顧客->多くの添付ファイル

すべての顧客を取得し、ブール仮想フィールド「has_attach」を追加して選択し、顧客が添付ファイルを持っているかどうかを確認します。

GROUP BYなしで、これが可能であれば:-)

4

3 に答える 3

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実際にはすべてのレコードを読み取るわけではないためです。レコードが存在するどうかをチェックするだけです。

実際、インデックスを使用する場合、これはテーブルからレコードを読み取ることさえしません。インデックスが一致するレコードを指していることを確認し、そこで停止します。

于 2012-11-08T13:29:06.080 に答える
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
于 2012-11-08T13:20:48.323 に答える
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の何かです

于 2012-11-08T13:18:49.163 に答える