Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用IF和ELSE语句进行sql查询_Mysql_Sql_If Statement_Union - Fatal编程技术网

Mysql 如何使用IF和ELSE语句进行sql查询

Mysql 如何使用IF和ELSE语句进行sql查询,mysql,sql,if-statement,union,Mysql,Sql,If Statement,Union,我要选择查询以获取答案值。我需要检查它是否回答或为空。我用了d.AM_-Answer或null,它不起作用。它只接受空值。因此,我改变了我的查询,如下所示,但它不起作用 SELECT a.QM_ID, a.QM_QCM_ID, a.QM_Question, a.QM_Type, a.QM_Parent_Id, c.AM_Answer, c.AM_Comments FROM question_master a IN

我要选择查询以获取答案值。我需要检查它是否回答或为空。我用了d.AM_-Answer或null,它不起作用。它只接受空值。因此,我改变了我的查询,如下所示,但它不起作用

SELECT a.QM_ID,
       a.QM_QCM_ID,
       a.QM_Question,
       a.QM_Type,
       a.QM_Parent_Id,
       c.AM_Answer,
       c.AM_Comments
FROM question_master a
INNER JOIN Assessment_master c ON (c.AM_QM_ID = a.QM_ID
                                   AND c.AM_HNM_ID = %d
                                   AND c.AM_HM_ID = %d
                                   AND c.AM_ASM_Local_Id = %@)
WHERE a.QM_Parent_Id = 0
  AND a.QM_Status = 'A'
  AND a.QM_QCM_ID = %@
  AND a.QM_QRM_Id = %@ IF(d.AM_Answer IS NULL) THEN
UNION
SELECT b.QM_ID,
       b.QM_QCM_ID,
       b.QM_Question,
       b.QM_Type,
       b.QM_Parent_Id,
       NULL,
       NULL
FROM question_master b
INNER JOIN Assessment_master d ON ((d.AM_QM_ID = b.QM_Parent_Id
                                    OR d.AM_QM_ID = b.QM_ID)
                                   AND d.AM_HNM_ID = %d
                                   AND d.AM_HM_ID = %d
                                   AND d.AM_ASM_Local_Id = %@)
WHERE b.QM_Parent_Id != 0
  AND b.QM_Status = 'A'
  AND b.QM_QCM_ID = %@
  AND b.QM_QRM_Id = %@ ELSE IF(d.AM_Answer IS NOT NULL) THEN
UNION
SELECT b.QM_ID,
       b.QM_QCM_ID,
       b.QM_Question,
       b.QM_Type,
       b.QM_Parent_Id,
       d.AM_Answer,
       d.AM_Comments
FROM question_master b
INNER JOIN Assessment_master d ON ((d.AM_QM_ID = b.QM_Parent_Id
                                    OR d.AM_QM_ID = b.QM_ID)
                                   AND d.AM_HNM_ID = %d
                                   AND d.AM_HM_ID = %d
                                   AND d.AM_ASM_Local_Id = %@)
WHERE b.QM_Parent_Id != 0
  AND b.QM_Status = 'A'
  AND b.QM_QCM_ID = %@
  AND b.QM_QRM_Id = %@ END IF

1要检查空值,可以使用运算符

2您也可以使用SQL CASE语句


3我建议您在准备动态查询时为此使用存储过程

您可以将条件d.answer设置为非空以选择非空答案。

尝试

IF(d.AM_Answer IS null)
而不是

IF(d.AM_Answer == null)

from:您不能使用算术比较运算符,例如=,@mcalex,他可以使用的是null。我想它会告诉您一个错误,因为union关键字在这两种情况下,selects之间有什么区别?您能告诉我查询中每个union的用途吗?