gpt4 book ai didi

MySQL - 使用 CASE WHEN 中的列到 WHERE 子句中

转载 作者:行者123 更新时间:2023-11-29 10:18:32 25 4
gpt4 key购买 nike

我想创建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com