1

バックグラウンド

顧客の購入レコードを含むテーブルがあり、テーブルには Coupon_id という名前の列があり、顧客が購入中にクーポンを使用しなかった場合、この列は null になり、使用した場合はクーポン ID が含まれます。テーブルには、1 人の顧客の複数の購入を含めることができます。顧客は、ある購入ではクーポンを使用し、別の購入では使用しなかった可能性があります。

+-------+-------------+-----------+-------------+
| ID    | customer_id | coupon_id | other_data  | 
+-------+-------------+-----------+-------------+
| 0     |  1          | 32        | ...         |
| 1     |  1          | null      | ...         |
| 2     |  1          | null      | ...         |
| 3     |  1          | null      | ...         |
| 4     |  2          | null      | ...         |
| 5     |  3          | 11        | ...         |
| 6     |  4          | null      | ...         |
| 7     |  4          | null      | ...         |
+-------+-------------+-----------+-------------+ 

問題

クーポンを使用して購入したことがないすべての顧客の customer_id を取得したいと考えています。私が使用している現在のクエリは、クーポンで購入した顧客をまだ返しています。

SELECT customer_id from checkouts c 
WHERE code_id IS NULL
GROUP BY customer_id 
ORDER BY customer_id asc

質問

クーポンを使用して購入したことのない顧客の一意の ID のリストを選択するにはどうすればよいですか?

4

1 に答える 1

3

WHERE NOT EXISTSとサブクエリを使用します。何かのようなもの:

    SELECT DISTINCT
        customer_id
    FROM checkouts c
    WHERE NOT EXISTS (
        SELECT *
        FROM checkouts
        WHERE
            checkouts.customer_id = c.customer_id
            AND coupon_id IS NOT NULL
    ) cc;

それが正しい MySQL 構文かどうかは完全にはわかりませんが、それが要点です。

于 2013-11-08T02:42:58.237 に答える