2017-01-29 10 views
0

2つのテーブルを検索する必要があります。複数のMySQLコマンドを結合または交差する

私の2番目の表は、次のとおりです。

+---------+---------------+-------+ 
| user_id | is_first_time | score | 
+---------+---------------+-------+ 
| 44 |  1  | 20 | 
+---------+---------------+-------+ 
| 44 |  0  | 20 | 
+---------+---------------+-------+ 

私の最初の表は、単にユーザー情報が含まれています。私は、次のMySQLコマンドを使用している場合は、私も(私は「is_first_timeを変更する結果が得られます

SELECT * , users_score.user_id users_score_user_id 
FROM users JOIN users_score 
ON users_score.user_id = users.id 
WHERE (users_score.score='20' AND users_score.is_first_time='1') 
  • :私は、次のMySQLコマンドを使用している場合、私は結果を取得します

    • 「値を 『0』:

      :私は両方のコマンドを組み合わせて、場合

      SELECT * , users_score.user_id users_score_user_id 
      FROM users JOIN users_score 
      ON users_score.user_id = users.id 
      WHERE (users_score.score='20' AND users_score.is_first_time='0') 
      
    • しかし、私は結果を得ることはありません

      SELECT * , users_score.user_id users_score_user_id 
      FROM users JOIN users_score 
      ON users_score.user_id = users.id 
      WHERE (users_score.score='20' AND users_score.is_first_time='1') 
      AND (users_score.score='20' AND users_score.is_first_time='0') 
      

    どのようにして両方のコマンドを組み合わせたり交差させることができますか?

    ありがとうございました。

    ここにあなたがOR条件を使用する必要が
  • 答えて

    0

    を使用してより良い方法で記述することができますinまたはexistsを使用:

    SELECT u.* 
    FROM users u 
    WHERE u.id IN (SELECT us.user_id FROM users_score us WHERE us.score = '20' AND us.is_first_time = '0' 
          ) AND 
         u.id IN (SELECT us.user_id FROM users_score us WHERE us.score = '20' AND us.is_first_time = '1' 
          ); 
    

    ANDとの問題は、単一の行はあなただけのユーザーIDが必要な場合、私はgroup byhavingをお勧めします0と1

    両方することができないということです。私はシングルを削除

    select us.user_id 
    from users_score us 
    where score = 20 and us.is_first_time in (0, 1) 
    group by us.user_id 
    having count(distinct us.is_first_time) = 2; 
    

    注意引用符。列が数値の場合、比較には一重引用符を使用しないでください。 (もちろん、文字列の場合は、一重引用符を使用してください)

    +0

    ありがとうございます。私は正しい結果を得た。 – Bayu

    1

    WHERE (users_score.score='20' AND users_score.is_first_time='1') 
        OR (users_score.score='20' AND users_score.is_first_time='0') 
    

    しかし、あなたは、両方の条件に該当するユーザーをしたい場合には、その後の一つの方法、IN条件

    SELECT *, 
         users_score.user_id users_score_user_id 
    FROM users 
         JOIN users_score 
         ON users_score.user_id = users.id 
    WHERE users_score.score = '20' 
         AND users_score.is_first_time IN ('1', '0') 
    
    +0

    ご返信ありがとうございます。 ORは "is_first_time = 1"、 "is_first_time = 0"の行、 "is_first_time = 1および0"の行を取得します。したがって、1人のユーザーIDを取得する代わりに、3人が取得されます。ゴードン・リノフの答えはもっと正しいと思います。とにかくありがとう。 – Bayu

    関連する問題