我想做这样的查询
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)))
但真值或假值应包含一列。是否有可能以其他方式做到这一点?
答案 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)