2

基本的に、browser_requests テーブルに表示されない顧客テーブルからすべての行を取得したいと考えています。

SELECT *      
  FROM customers  JOIN  brochure_requests
    WHERE brochure_requests.first_name != customers.customer_first_name
    AND brochure_requests.last_name != customers.customer_last_name

パラメーターが = の場合、クエリは機能しますが、!= クエリを実行するとすぐに、プログラム (HeidiSQL) が無期限に、またはキャンセルするまでハングします。

4

3 に答える 3

4

使用NOT EXISTS、例えば

SELECT *      
FROM customers 
WHERE NOT EXISTS (
    SELECT 1
    FROM   brochure_requests
    WHERE  brochure_requests.first_name = customers.customer_first_name
    AND    brochure_requests.last_name = customers.customer_last_name)

また、パフォーマンスを向上させるためにフィールドbrochure_requests.first_nameとフィールドにインデックスを追加することをお勧めします。brochure_requests.last_name

于 2012-04-05T13:57:31.000 に答える
3
SELECT 
    *
FROM 
    customers  
    LEFT JOIN brochure_requests
        ON brochure_requests.first_name = customers.customer_first_name
        AND brochure_requests.last_name = customers.customer_last_name

WHERE 
    brochure_requests.first_name IS NULL

brochure_requestsまた、姓名を複製する代わりに、CustomerID を外部キーとして追加することにより、データベースを正規化することを検討してください。

于 2012-04-05T13:58:24.853 に答える