我在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] 删除。
我来说两句