Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 左连接查询问题与_Mysql_Sql - Fatal编程技术网

Mysql 左连接查询问题与

Mysql 左连接查询问题与,mysql,sql,Mysql,Sql,我在执行以下查询时遇到了一些问题-在所有情况下,我似乎只返回一小部分用户,而不是整个列表。 我有以下两个表格: Users: - UserId - email Updates: - UserId - Status - LastUpdated 我想要返回的是所有用户(来自用户)的列表,如果它们的状态是今天更新的(基于LastUpdated字段),否则为空或NULL,如果它今天没有更新 我已经做到了这一点: SELECT users.userid, updates

我在执行以下查询时遇到了一些问题-在所有情况下,我似乎只返回一小部分用户,而不是整个列表。
我有以下两个表格:

Users:

 - UserId
 - email

Updates:

 - UserId 
 - Status
 - LastUpdated
我想要返回的是所有用户(来自用户)的列表,如果它们的状态是今天更新的(基于LastUpdated字段),否则为空或NULL,如果它今天没有更新

我已经做到了这一点:

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

您可以使用
CASE
语句仅获取
更新。如果日期为今天,则状态为

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
或者,更好的是,如果您不需要
更新
行中的任何其他内容,只需执行以下操作:

SELECT users.userId, updates.status
FROM users 
LEFT JOIN updates ON users.userId=updates.userId
    AND DATE(LastUpdated) = DATE(NOW()) 
将您的条件放在连接中,否则它将强制询问每个连接。或者,您可以检查
LastUpdated
是否为
NULL
(因为左侧连接将只包含定位信息)。

试试这个

   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

我想你想要的是左外连接,返回所有用户,而不仅仅是今天有更新的用户。应该是这样的:

SELECT users.userid, updates.lastupdated
  FROM users
  LEFT OUTER JOIN (
    SELECT * FROM updates WHERE DATE(lastupdated) = DATE(NOW())
    ) updates ON users.userid = updates.userid
SELECT users.userid, updates.lastupdated
  FROM users
  LEFT OUTER JOIN (
    SELECT * FROM updates WHERE DATE(lastupdated) = DATE(NOW())
    ) updates ON users.userid = updates.userid