2017-03-06 5 views
0

から存在していないすべてを取得します。これは私が現時点で持っているものです:mysqlのは、私は2つのテーブルを持ってこんにちは2つのテーブル

SELECT * FROM customers WHERE NOT EXISTS (SELECT * FROM invoices WHERE invoices.customerid = customers.customerid AND month(invoices.fdate) = '2') 

それは10分間走り続けたとは結果がまだ存在しません。私は構文が働いても毎月行って、手動で私の顧客のテーブルからそれを横断しなければならないと思っています。

もっと良い解決策はありますか?すべての助けに感謝します。ありがとう

答えて

0

あなたのクエリはあなたが望むことをしません。正しく言い方一つは、おそらく任意のより良い動作しません。

このバージョンのために
SELECT c.* 
FROM customers c 
WHERE NOT EXISTS (SELECT 1 
        FROM invoices i 
        WHERE i.customerid = c.customerid AND 
         i.fdate >= CURDATE() - interval 6 month 
       ); 

、あなたがinvoices(customerid, fdate)にインデックスをしたいです。

ます。また、このに打撃与えるかもしれない:

SELECT c.* 
FROM customers c JOIN 
    (SELECT customerid, MAX(fdate) as max_fdate 
     FROM invoices i 
     GROUP BY customerid 
    ) i 
    ON i.customerid = c.customerid 
WHERE i.max_fdate < CURDATE() - interval 6 month; 
+0

を私は両方のフィールドにインデックスを行なったし、下のソリューションを試してみました。それは2分間走って、過去6ヶ月間に私から購入していないすべての顧客のリストに戻った。過去6ヶ月以内に月に1つ以上の請求書を持っていない顧客のリストを取得することは可能ですか?ありがとう – AndrewTsang

+0

@AndrewTsang。 。 。サンプルデータと希望の結果とともに、別の質問をすることをお勧めします。この質問を注意深く読んでおいても、あなたが求めていることが示唆されていますが、明確な質問が望ましいです。 –

関連する問題