如果我使用
查询包含空列值的行,我可以成功避免损坏的 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/