如果在WHERE子句中则为else

时间:2013-03-01 16:32:59

标签: mysql sql if-statement

我有这个问题:

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE (
`email` LIKE  '%@domain.nl%'
OR  `email2` LIKE  '%@domain.nl%'
)

但我想做这样的事情:

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE IF(`email` > 0,
`email` LIKE  '%@domain.nl%'
,  `email2` LIKE  '%@domain.nl%'
)

如何检查电子邮件是否存在?我想使用电子邮件,如果此字段为空,我想使用email2。我该如何做到这一点?

5 个答案:

答案 0 :(得分:46)

IF用于选择字段,然后LIKE子句放在其后面:

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE IF(`email` != '', `email`, `email2`) LIKE  '%@domain.nl%'

答案 1 :(得分:8)

您想使用coalesce()

where coalesce(email, email2) like '%anja@fiskkoer.nl%'

如果你想处理字符串('')与NULL,一个案例有效:

where (case when email is NULL or email = '' then email2 else email end) like '%anja@fiskkoer.nl%'

而且,如果你担心字符串真的只是空格:

where (case when email is NULL or ltrim(email) = '' then email2 else email end) like '%anja@fiskkoer.nl%'

顺便说一下,样本if语句实际上是在说“如果电子邮件以大于0的数字开头”。这是因为比较是0,一个数字。 MySQL隐式尝试将字符串转换为数字。因此,'abcd@de.com'会失败,因为该字符串将转换为0.与'0abc@de.com'一样。但是,'1abc@de.com'和'01abc@de.com'会成功。

答案 2 :(得分:2)

请注意以下内容与Gordon Linoff的回答在功能上有所不同。他的回答假定如果email2为NULL,则要使用email。如果email2是空字符串,我假设您要使用email。正确答案取决于您的数据库(或者您可以执行NULL检查空字符串检查 - 这一切都取决于适合您的数据库设计的内容)。

SELECT  `id` ,  `naam` 
FROM  `klanten` 
WHERE `email` LIKE  '%anja@fiskkoer.nl%'
OR (LENGTH(email) = 0 AND `email2` LIKE  '%anja@fiskkoer.nl%')

答案 3 :(得分:1)

试试这个,希望有所帮助

select user_display_image as user_image,
user_display_name as user_name,
invitee_phone,
(
 CASE 
    WHEN invitee_status=1 THEN "attending" 
    WHEN invitee_status=2 THEN "unsure" 
    WHEN invitee_status=3 THEN "declined" 
    WHEN invitee_status=0 THEN "notreviwed" END
) AS  invitee_status
 FROM your_tbl

答案 4 :(得分:0)

这里是对具有查询参数的表具有外键关系的表的示例查询。

enter image description here

SET @x = -1;
SELECT id, categoryName 
FROM Catergory WHERE IF(@x > 0,category_ParentId = @x,category_ParentId IS NOT NULL);

@x可以更改。