2016-08-24 167 views
3

我想寫一個查詢使用IF,但它不工作,這個查詢有什麼問題?如果條件無法正常工作

SELECT 
IF(Emp.Name is not null)  
     ((Emp.Name) + '_' + (Emp.LastName)) as ID 
else 
    Emp.ID 

我得到這個錯誤:

Incorrect syntax near the keyword 'IF'. 

這是爲什麼?

謝謝。

+1

SQL Server或MySQL? –

+0

SQL沒有'IF'。告訴我們你想要做什麼。添加樣本表數據和預期結果。 – jarlh

+0

語法是'SELECT IF(condition,iftrue,iffalse)AS colname' [link](https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html) – user5226582

回答

4

您可以使用CASE EXPRESSION

SELECT CASE WHEN emp.name is not null THEN emp.name + '_' + emp.lastName 
      ELSE Emp.id 
     END as [ID] 
FROM ... 

IF()在SQL-服務器(我假設由CONCAT語法)執行不同,

IF (Condition) 
    SQL STATEMENT 
ELSE 
    SQL STATEMENT 

這意味着你需要執行整個選擇在每個塊中。你這樣的IF()在MySQL的使用,IF(Condition , THEN , ELSE)

2

你需要做的這一個CASE條款:

SELECT 
CASE WHEN (Emp.Name IS NOT NULL)  
    THEN ((Emp.Name) + '_' + (Emp.LastName)) 
ELSE 
Emp.ID 
END as ID 

IF..ELSE語法有所不同:

IF(Emp.Name IS NOT NULL)  
    SELECT ((Emp.Name) + '_' + (Emp.LastName)) AS ID 
ELSE 
    SELECT Emp.ID AS ID 
1

假設它基於的SQL服務器在你的語法上使用這個:

SELECT CASE <variable> WHEN <value>  THEN <returnvalue> 
         WHEN <othervalue> THEN <returnthis> 
             ELSE <returndefaultcase> 
    END AS <newcolumnname> 
FROM <table> 
0

而不是使用IF,您可以在SELECT語句中使用CASE。像這樣的東西

SELECT 
    CASE Emp.Name 
    WHEN NULL THEN Emp.ID 
    ELSE CONCAT(CONCAT(Emp.Name,'_'),Emp.LastName) 
    END AS "ID" 
FROM Emp; 

希望它有幫助。