2017-03-05 17 views
-3

私は長い間頭をひっぱってきましたが、私はそれを自分で修正するつもりはないので、私はここでいくつかの助けを得ることができます、これは本当に感謝します。MySQLは値に一致する一意のレコードを選択します

私の問題は、以下の通りです:

を私はこの単純なクエリを持っている:

SELECT * FROM oc_order WHERE order_status_id = '0' ORDER BY order_id DESC 

これは、これはまだ完了していない注文を表す値0を持つすべてのレコードを示しています。

ためにemail他の完成オーダー

を持っていないところ私が本当にしたいことは、問題は、出力リストにもORDER_STATUS_IDたレコードがたくさんあることを終了していない注文をされています= 1(完了した注文)。

order_status_id 0と1を組み合わせたクエリが必要ですが、order_status_id = 1の同じ電子メールアドレス(order_email)を持つレコードがある場合は、表示しません。

これがうまくいくと、私はすべての注文が完了していないクリーンリストを持っているので、割引クーポンで顧客にメールすることができます。

ご協力ありがとうございます。私は事をclairyする必要がありますので、もちろんそうすることがうれしいです。

実際のデータベースはもう少し複雑ですが、基本的には上記の問題は私にとって非常に時間の節約になるでしょう。

種類について、固定

選択T1 * T1 oc_orderからはt2.email = t1.emailとt2.order_status_id = '3' T1にoc_order T2に参加左。 order_status_id = '0' およびt2.order_status_idがNULL ORDER BY t1です。 order_id DESC

+1

group by、sum(finished)<1 – Jeff

+0

私はあなたに何を言おうとしていますか? – Ravi

+0

ようこそstackoverflow - あなたがdownvotedされて申し訳ありませんが、質問がうまくいくのでかなり厳しいようです。 –

答えて

0

はここでそれを行うための一つの方法です - 内側のクエリはあなたに完成= 1と電子メールアドレスのリストを与えている、という結果がに使用されている外側の結果からそれらの電子メールを除外...

SELECT * FROM mytable 
    WHERE email NOT IN (
     SELECT DISTINCT email FROM mytable WHERE finished=1 
    ) 
+0

あなたの答えは正しいですが、私はOPが意味することは、これらの電子メールを除外するのではなく、最初の未完了の注文のみを表示することだと思います。営業担当者は確認してより具体的である必要がありますが、単純な別名またはグループが動作する場合は –

+0

質問はもともとサンプルデータを持っていましたが、削除されました!これは、グループ化された条件に基づいてグループ化されていない行を取得する一般的な手法を示しています。 –

+0

編集をチェックしていない:) –

関連する問題