5

次のクエリを実行する際に問題が発生しています。すべてのケースで、リスト全体ではなく、ユーザーの小さなサブセットのみが返されるようです。
次の2つのテーブルがあります。

Users:

 - UserId
 - email

Updates:

 - UserId 
 - Status
 - LastUpdated

私が返したいのは、(Users からの) すべてのユーザーのリスト、(LastUpdated フィールドに基づいて) 今日更新された場合はそのステータス、それ以外の場合は今日更新されなかった場合は空白または NULL です。

私はこれまで持っています:

SELECT users.userid, 
       updates.status 
FROM   users 
       LEFT JOIN updates 
              ON users.userid = updates.userid 
WHERE  Date(lastupdated) = Date(Now()) 
4

4 に答える 4

5

CASEステートメントを使用してupdates.status、日付が今日の場合にのみ取得できます。

SELECT users.userId, 
    CASE WHEN DATE(LastUpdated) = DATE(NOW()) THEN updates.status ELSE NULL END AS status
FROM users 
LEFT JOIN updates ON users.userId=updates.userId

updatesまたは、さらに良いことに、行から他に何も必要ない場合は、次のようにします。

SELECT users.userId, updates.status
FROM users 
LEFT JOIN updates ON users.userId=updates.userId
    AND DATE(LastUpdated) = DATE(NOW()) 
于 2012-10-17T14:10:44.397 に答える
2
SELECT    users.userId, updates.status
FROM      users
LEFT JOIN updates
  ON      updates.userId = users.userId
    AND   DATE(updates.LastUpdated) = DATE(NOW())

条件を結合内に入れます。そうしないと、すべての結合が強制的に照会されます。または、私が信じていることを確認することもできLastUpdatedますNULL(LEFT 結合には位置情報のみが含まれるため)。

于 2012-10-17T14:11:55.257 に答える
0

これを試して

   SELECT users.userId, case when  DATE(LastUpdated) = DATE(NOW())
 updates.status else null end as status
     FROM users 
LEFT JOIN updates ON users.userId=updates.userIdd
于 2012-10-17T14:13:15.720 に答える
0

あなたが求めているのは、今日更新されたユーザーだけでなく、すべてのユーザーを返すための左外部結合だと思います。それは次のようになります。

SELECT users.userid, updates.lastupdated
  FROM users
  LEFT OUTER JOIN (
    SELECT * FROM updates WHERE DATE(lastupdated) = DATE(NOW())
    ) updates ON users.userid = updates.userid
于 2012-10-17T14:26:37.810 に答える