SQL - IF EXISTS - SELECT A - ELSE - SELECT B

时间:2013-07-11 15:15:41

标签: php mysql sql if-statement

我在php脚本中调用SQL。有时在“DE”中没有值,如果是这种情况我想从“EN”获得值

它应该是这样的,但它不是这样工作

IF (EXISTS (SELECT epf_application_detail.description FROM epf_application_detail INNER JOIN app_uri ON epf_application_detail.application_id=app_uri.application_id WHERE app_uri.uri = '/ps-puzzle-daily-download-for-ipad-iphone-327103760.html' AND epf_application_detail.language_code = 'DE' LIMIT 1))
BEGIN
SELECT epf_application_detail.description FROM epf_application_detail INNER JOIN app_uri ON epf_application_detail.application_id=app_uri.application_id WHERE app_uri.uri = '/ps-puzzle-daily-download-for-ipad-iphone-327103760.html' AND epf_application_detail.language_code = 'DE' LIMIT 1
END
ELSE
BEGIN
SELECT epf_application_detail.description FROM epf_application_detail INNER JOIN app_uri ON epf_application_detail.application_id=app_uri.application_id WHERE app_uri.uri = '/ps-puzzle-daily-download-for-ipad-iphone-327103760.html' AND epf_application_detail.language_code = 'EN' LIMIT 1
END

我收到此错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (EXISTS (SELECT epf_application_detail.description FROM epf_application_detai' at line 1 

2 个答案:

答案 0 :(得分:7)

这是另一种方式,

SELECT  d.description 
FROM    epf_application_detail d
        INNER JOIN app_uri a
            ON d.application_id = a.application_id 
WHERE   a.uri = '/ps-puzzle-daily-download-for-ipad-iphone-327103760.html'
ORDER   BY FIELD(d.language_code, 'EN', 'DE') DESC
LIMIT   1

如果有其他语言,您可以添加条件

SELECT ....
FROM ....
WHERE a.uri = '...' AND d.language_code IN  ('EN', 'DE')
ORDER BY ...
LIMIT 1

答案 1 :(得分:1)

不要在EXISTS关键字之前使用括号,因此它应该是 - >如果存在(选择.....