mysql - 连接派生表时列不能为空错误

标签 mysql sql sql-server

这是我的 sql 查询:

select
  t1.id, t1.text as text, l.likes as likecount
from
  table1 as t1 left join (select feed_id, count(user_id) as likes
                          from likes
                          where feed_id=12345) l
  on t1.id=l.feed_id where t1.id=12345

此查询仅获取一个特定的条目以及有多少人喜欢该条目。在此示例中,条目号为 12345。当条目至少有 1 个赞时,此查询工作正常。但是,当我为没有喜欢的条目运行此查询时,它会给出列提要不能为空的错误。

此错误的原因是内部查询返回一个 feed_id 为空的行并且喜欢 0,这在连接表时造成问题。另一个有趣的因素是这个东西在我的本地服务器上是工作文件,而不是在我的实时服务器上。

最佳答案

您只能使用一个 WHERE 子句:

select
  t1.id, t1.text as text, l.likes as likecount
from
  table1 as t1 left join (select feed_id, count(user_id) as likes
                          from likes
                          group by feed_id) l
  on t1.id=l.feed_id
where t1.id=12345

您的子查询中不需要它,但您需要改用 GROUP BY 子句。

但是您可能可以使用以下方法简化上面的查询:

SELECT
  t1.id, t1.text, COUNT(DISTINCT likes.user_id) likecount
FROM
  table1 as t1 LEFT JOIN likes
  ON t1.id = likes.feed_id
WHERE
  t1.id = 12345

关于mysql - 连接派生表时列不能为空错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16366639/

相关文章:

mysql - 从一列获取相对于另一列数据的数据?

mysql - 使用 like 和 order by 查询非常慢

MySQL 5.7 | MySQL 5.7分组依据 |独特|聚合错误

mysql - 使用 Sequelize 连接到数据库时出现 ER_BAD_DB_ERROR

php - 在 SQL 表 Google map 上加载多个值时出错

mysql - 如何从 mysql 表中选择最新的日期记录集

java - 选择查询很慢

sql-server - 使用 CONTAINSTABLE 转义 SQL Server 全文搜索查询中的符号

sql-server - SSRS 传递报告参数

sql-server - Sqoop导出到SQL Server-无法解析字符串值(NTL-NATIONAL)