gpt4 book ai didi

mysql - 如何使用包含运算符的 WHERE 在 SQL SELECT 语句中容纳空值

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

如果我使用

查询包含空列值的行,我可以成功避免损坏的 SQL 语句
IFNULL('column_name',''), 

但是当我尝试使用包含比较运算符的 SQL 语句时,例如

"SELECT * FROM table WHERE IFNULL('pay','') <= $pay"

如果 pay 为空,我会得到一个“不是数字错误”,比如

ERROR: Unknown column 'NaN' in 'where clause'

从SQL语句可以看出,里面有一个NaN。

SELECT 
*
FROM
(SELECT DISTINCT
ts.users_user_id
FROM
subjects s
LEFT JOIN teachers_subjects ts
ON s.subject_ID = ts.subject_id
JOIN users_teachers ut
ON ut.user_id = ts.users_user_id
LEFT JOIN stations st
ON st.station_id = ut.station_id
LEFT JOIN majors mj
ON mj.major_id = ut.major_id
WHERE 1 = 1
AND IFNULL(ut.pay, 10) >= NaN
AND (ut.pay <= 500
OR ut.pay IS NULL)) qualified
JOIN users u
ON qualified.users_user_id = u.user_id
JOIN users_teachers ut
ON qualified.users_user_id = ut.user_id
JOIN teachers_subjects ts2
ON qualified.users_user_id = ts2.users_user_id
JOIN subjects s2
ON ts2.subject_id = s2.subject_id
LEFT JOIN stations st
ON ut.station_id = st.station_id

我不能用任意数值替换 pay,因为我在付费过滤器中使用它。我需要 SQL 语句只返回包含 pay 空值的行,当然,满足所有其他 WHERE 条件。

最佳答案

最好的方法是根本不替换 NULL,而是有一个单独的条件检查 NULL。然后您可以根据需要包含/排除它。

SELECT * FROM table
WHERE pay IS NULL
OR (other conditions)

再次仔细观察,您的代码的另一个问题是您使用的是数字比较运算符,但用字符串替换 '' 是空字符串 - 错误类型我不确定为什么您在查询中包含 NaN 或 WHERE 1 = 1 因为它总是计算为 true...

WHERE ( ut.pay IS NULL OR ut.pay <= 500)

应该可以正常工作。

编辑:反向运算符

关于mysql - 如何使用包含运算符的 WHERE 在 SQL SELECT 语句中容纳空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20796433/

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