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

标签 mysql sql

如果我使用

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

相关文章:

mysql - 具有多个连接的 MySQL 查询执行计划效率低下

sql - 当该日期的至少两条记录具有相同的持续时间或至少一条记录的持续时间为 0 时,如何标记该日期的所有记录

mysql - MySQL 数据类型的问题

c# - .Join() 上的 LINQ to SQL 错误

php - 如何在使用jquery检查复选框时更新数据库?

mysql - 查询无法执行,或者等待时间太长

mysql - 从用户表中选择用户名和从注释表中选择注释?

mysql - 插入新行,除非其中一个值与另一行匹配?

mysql - Microsoft Access 2010 中 OrderByOn 属性中的错误

php - 尝试上传大型 sql 文件时收到错误消息 : import. php:缺少参数:import_type