SELECT查询返回空结果错误

吉恩

我在SELECT下面给出的查询中使用查询作为子查询...

SELECT COUNT (`Notification`.`id`) AS `count`
FROM `listaren_mercury_live`.`notifications` AS `Notification`
WHERE NOT FIND_IN_SET(`Notification`.`id`,(SELECT read_ids FROM read_notifications WHERE user_id = 46))
AND((notisfication_for IN("all","India"))
OR(FIND_IN_SET(46,notification_for))

该查询在以下情况下工作正常

SELECT read_ids FROM read_notifications WHERE user_id = userid)

返回结果,例如21,22,23,24

但是当此查询返回空时。

结果ID0代替3该用户有3条未读通知;所以结果一定是3

问题

当内部选择查询返回时,查询给出正确的结果

12,42 

但是如果查询返回null,则整个查询的结果将变为0。

带查询的预期结果

预期结果

结果我得到

结果我得到

我只想要子查询返回空值。然后查询(Notification.id,(SELECT read_ids FROM read_notifications WHERE user_id)= 46)结果看起来像

 (`Notification`.`id`,(0))

代替

(`Notification`.`id`,())

这样就可以正常工作

请告诉我我需要什么改进。

谢谢

缺口

尝试更换

FIND_IN_SET(`Notification`.`id`,(SELECT read_ids FROM read_notifications WHERE user_id = 46))

FIND_IN_SET(`Notification`.`id`,IFNULL((SELECT read_ids FROM read_notifications WHERE user_id = 46), ''))

根据手册,如果子查询结果为空,则它将返回NULL,如果任一参数为NULL,并且NOT NULL仍为NULL,则FIND_IN_SET将返回NULL,与NULL AND 1相同,并且NULL等于false因此,当子查询返回NULL时,您的WHERE条件将失败。

通过在子查询结果周围添加IFNULL,可以使它返回对FIND_IN_SET有效的值,这将使查询按预期方式工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章