2016-08-24 122 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; 

希望它有帮助。