选择如果那么ELSE声明

时间:2015-12-23 22:48:31

标签: mysql

我想做这样的查询

SELECT if(EXISTS(SELECT * FROM application WHERE id_student=1 
AND ap_status<>"Wysłano" AND date(app_date) > (SELECT tax_year FROM const_data)),
(SELECT * FROM application WHERE id_student=1 AND ap_status<>"Wysłano" AND date(app_date) > (SELECT tax_year FROM const_data)),
(SELECT * FROM application WHERE id_student=1 AND date(app_date) > (SELECT tax_year FROM const_data)))

但真值或假值应包含一列。是否有可能以其他方式做到这一点?

1 个答案:

答案 0 :(得分:1)

我甚至不确定你尝试过的是否会执行,但这应该可以实现它的目标:

SELECT * 
FROM application 
WHERE id_student=1 AND date(app_date) > (SELECT tax_year FROM const_data)
ORDER BY ap_status="Wysłano" 
LIMIT 1

如果const_data有多行,则会失败。

编辑:嗯,如果您期望多条记录,这个答案就不太对了。此时,最佳解决方案是删除限制并处理结果,无论代码处理这些结果。它可以在一个查询中完成,但我通常不会推荐它。

Edit2:旁注......如果app_date是日期时间,您可以通过删除使用DATE()函数并将tax_year转换为日期时间来看到性能提升。

Edit3:最后一个,我保证......可能。在必须在一个查询中完成并且之后无法处理结果的情况下,这应该有效。

SELECT * 
FROM application 
WHERE id_student=1 AND date(app_date) > (SELECT tax_year FROM const_data)
   AND IF(EXISTS([that query]), ap_status<>"Wysłano", TRUE)