MySQL-使用column from CASE WHEN into WHERE子句

MySQL-使用column from CASE WHEN into WHERE子句,mysql,Mysql,我想创建一个SQL命令,该命令将检查记录是否存在,以及: 1如果存在,则等于1 2如果它不存在,则等于NULL 下一步-我想在WHERE子句中使用这个值1或NULL 所以脚本应该检查表_private中是否存在记录,如果存在,它应该通过以下方式进行搜索: SELECT * FROM `images` WHERE advert_id = 5795 and img_user_id = 1 SELECT * FROM `images` WHERE advert_id = 5795 and img_u

我想创建一个SQL命令,该命令将检查记录是否存在,以及:

1如果存在,则等于1

2如果它不存在,则等于NULL

下一步-我想在WHERE子句中使用这个值1或NULL

所以脚本应该检查表_private中是否存在记录,如果存在,它应该通过以下方式进行搜索:

SELECT * FROM `images` WHERE advert_id = 5795 and img_user_id = 1
SELECT * FROM `images` WHERE advert_id = 5795 and img_user_id is NULL
如果没有,则应通过以下方式进行搜索:

SELECT * FROM `images` WHERE advert_id = 5795 and img_user_id = 1
SELECT * FROM `images` WHERE advert_id = 5795 and img_user_id is NULL
下面是我的sql命令:

SELECT *, CASE WHEN NOT EXISTS (SELECT * FROM `table_private` WHERE
client_id = 1 AND id = 5795) THEN NULL ELSE 1 END AS exist_value 
FROM `images` WHERE advert_id = 5795 AND img_user_id = exist_value;
但我得到了:

Nieznana kolumna“存在值”w where子句 为什么?此列是exist-当我删除命令的这一部分:和img_user_id=exist_值时,sql将此列作为resuslt正确返回


感谢您的帮助。

在外部查询中获取数据,如

SELECT * FROM (
SELECT *, 
CASE WHEN NOT EXISTS (SELECT * FROM `table_private` WHERE
client_id = 1 AND id = 5795) THEN NULL ELSE 1 END AS exist_value 
FROM `images` ) xxx
WHERE advert_id = 5795 
AND img_user_id = exist_value;
编辑:收集更多信息后,删除的内容不再适用

要在完整性意见中具体说明建议:

SELECT *, CASE WHEN NOT EXISTS (SELECT * FROM `table_private` WHERE
client_id = 1 AND id = 5795) THEN NULL ELSE 1 END AS exist_value 
FROM `images` 
WHERE advert_id = 5795 
AND img_user_id 
    <=> /* exist_value */ 
      CASE WHEN NOT EXISTS (SELECT * 
                            FROM `table_private` 
                            WHERE client_id = 1 AND id = 5795) 
           THEN NULL 
           ELSE 1 
      END
;
可以使用“必须基于选择列表中的计算值进行筛选”


是空安全相等运算符,它允许与空进行比较

您不能在WHERE子句中使用select表达式中的别名。因此,我如何才能根据需要获取结果?您可以使用被别名化的整个表达式的副本替换对别名的引用。如果NOT EXISTS为true,则column exist_value=NULL。然后在select语句中是:和img_user_id=NULL;但它可能是:并且img_user_id为null它对我没有帮助,因为我需要添加is null而不是=null。在我的脚本中设置空值非常重要,我不能只使用=1。你的意思是你需要。。。img\U用户id案例…?`是null safe equals运算符。我将查询更改为:SELECT*FROM images,其中ADVIDER_id=5795,img_user_id CASE不存在时,SELECT*FROM table_private,其中id=5795,client_id=1,然后null ELSE 1结束,但我没有得到任何结果。当我将此查询更改为:SELECT*FROM images,其中advert_id=5795,img_user_id为NULL时,我得到了五个结果,所以运算符对我没有帮助。可以肯定的是,SELECT*FROM table_private,其中id=5795,client_id=1返回什么?我尝试了您的查询,情况也是一样。结果为0,但当我尝试使用:SELECT*时,从广告id=5795且img用户id为NULL的图像中,我得到了5个结果。ye,现在我检查了AND=NULL是个坏主意,因为我得到了0个结果。有什么想法吗?你能编辑这个问题并解释一下整个查询应该做什么吗?显示一些示例数据和所需结果。图像和表_private之间是否存在任何关系?表图像杂志所有来自我的服务器的图像。如果图像具有空值,如img_user_id->这是服务器上常见的默认图像,则用户永远不会编辑/更改该图像。如果记录存在于表\u private中,则脚本应始终获取img\u user\u id=user\u id的图像,因为此用户保存在过去的一些图像中,所以他不使用默认的空图像,而是使用默认的空图像=1。因此,如果记录存在于表\u private中,则脚本应从以下位置获取数据:。。。img_user_id=1,但当表_private中不存在记录时,脚本应该从img_user_id获取数据为空。看起来只需要使用操作符就可以了。我已经更新了答案。