作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个 SQL 命令来检查记录是否存在并且:
1) if it exists, it will be equal to 1,
2) if it does not exist, it will be equal to NULL.
下一步 - 我想在 WHERE 子句中使用这个值(1 或 NULL)。
因此脚本应检查table_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
这是我的 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 'exist_value' w where 子句
为什么?此列存在 - 当我删除这部分命令时:AND img_user_id = Exist_value
,sql 正确返回此列作为结果。
感谢您的帮助。
最佳答案
您可以使用HAVING
根据 SELECT
中的计算值进行过滤列表。
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
HAVING img_user_id <=> exist_value;
<=>
是空安全相等运算符,它允许与 NULL
进行比较。
关于MySQL - 使用 CASE WHEN 中的列到 WHERE 子句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49741656/
我是一名优秀的程序员,十分优秀!