2017-02-22 5 views
0

こんにちは、私はいくつかのユーザーのメールを選択する必要があり、どのように理解できません。MySQLはどこに存在しないのですか?

私は3つのテーブルを持っています。

ユーザー支払いコード

1人のユーザーが支払った(コードwhithout)、ラインはpayementテーブルに追加された場合、私たちは

<strong>Payement Table</strong> 
+----+--------+--------+--------+ 
| Id | UserId | Amount | CodeId | 
+----+--------+--------+--------+ 
| 01 | 2545 |  20 |  0 | 
+----+--------+--------+--------+ 

のようなものを持っています同じユーザーが今すぐコードを支払った

<strong>Payement Table</strong> 
+----+--------+--------+--------+ 
| Id | UserId | Amount | CodeId | 
+----+--------+--------+--------+ 
| 01 | 2545 | 20  | 0  | 
| 02 | 2545 | 5  | 42  | 
+----+--------+--------+--------+ 

私が欲しいのは、既に支払い済みの顧客ではなく、すでにコードを使用している顧客(この場合はCodeId = 42)を選択することです。

だから私はこの

SELECT mail 
    FROM User " 
INNER JOIN payement ON User.id = payement.UserId 
WHERE payement.CodeId<>42 
    AND payement.amount>0 
GROUP BY mail 

をしようとした私の問題は、次のとおりです。

私はまだ、この要求にコードを使用する顧客を持っています。理由を知っていると思う。しかし、どこに存在しないの?どうやって ?

+0

他のテーブルのスキーマを教えてください。 – RRajani

+1

SQLは正常に動作するはずです。 42. –

+0

でCodeIdを返すべきではありません@LuudvanKeulenまた、42 CodeId.Means CodeId = 0,1,2 ..、40,41,43,44以外の顧客を返します。 –

答えて

1

コードを使用せずにユーザーが支払う場合は、codeid = 0となります。もしそうなら、試してみてください。

SELECT mail 
FROM User 
INNER JOIN payement ON User.id = payement.UserId 
WHERE payement.CodeId = 0 
    AND payement.amount > 0 
GROUP BY mail 
0

をあなたはどれをしたい場合、あなたは顧客がコード= 0を使用しているしたいならば、

SELECT mail FROM User 
INNER JOIN payement 
ON User.id = payement.UserId 
WHERE payement.CodeId in (0) and payement.amount > 0 GROUP BY mail 

SELECT mail FROM User 
INNER JOIN payement 
ON User.id = payement.UserId 
WHERE payement.CodeId not in (0,42) and payement.amount > 0 GROUP BY mail 

マルチ状態のためinまたはnot in句を使用する必要があります顧客はコードを使用していませんでした!= 0次に

SELECT mail FROM User 
INNER JOIN payement 
ON User.id = payement.UserId 
WHERE payement.CodeId not in (0) and payement.amount > 0 GROUP BY mail 
+0

なぜダウン投票??? – denny

+0

私はdownvoteを補うためにupvoted。それをdownvotedユーザーが私のアップヴォートを削除します固体の説明を与える場合。 –

+0

@ LuudvanKeulenあなたのサポートに感謝 – denny

0

同じユーザーに他の支払いがあっても、コード42について言及したユーザーを除外したいと思うようです。

はこのような何かを試してみてください:LEFTの使用は、JOIN

SELECT mail, SUM(p.amount) payements 
    FROM User 
    LEFT JOIN payement px ON User.id = px.UserId AND px.CodeId = 42 
    JOIN payement p ON User.id = p.UserId AND p.CodeId <> 42 
WHERE px.UserID IS NULL 
    AND p.amount > 0 
GROUP BY mail 

お知らせは/特定の行を除外するためにNULLパターンです。これはLEFT JOINのON基準に一致するものを除外するためによく使用される手法です。

2つの別々の結合でpayayテーブルを使用することにも注意してください。

関連する問題