我正在试图找出一种方法来使用if子句在sqlfillde查询我的模式,基本上我需要检查表是否有行匹配,如果label ==?或者如果name == ?,那么以下查询将完成工作。如果sqlfiddle滞后,我会把方案放在
之下id name label description
1 Grams G Used to measure light weight items
1 Kilograms G Used to measure heavy weight items
3 M Liters ML Used to measure liquids
4 Grams G L Used to measure liquids
SELECT * FROM `catutype` WHERE label = "G" OR name = "Grams"
但如果匹配记录的id == 2,我不想排除该记录。所以我试过这个,
SELECT * FROM `catutype` WHERE id!= 2 AND label = "G" OR name = "Grams"
正如你所看到的,它没有成功。我得到的唯一解决方案是通过子查询
SELECT *,(SELECT label FROM catutype WHERE name = "Grams") as "type" FROM catutype WHERE catutype.id != 2
但是我仍然无法运行两个子查询来检查标签是否匹配,为了更清楚,我将在mysql中编写一个简单的伪代码。
if(id!=2)
{
check if label = ? OR name = ?
}
谢谢。
答案 0 :(得分:0)
了解运算符优先级,需要括号,因为AND的优先级高于OR
SELECT * FROM `catutype` WHERE id!= 2 AND (label = "G" OR name = "Grams")
没有它们,您的语句将被解析为
SELECT * FROM `catutype` WHERE (id!= 2 AND label = "G") OR name = "Grams"
答案 1 :(得分:0)
将您的查询更改为:
SELECT * FROM `cat_type` WHERE id!= 2 AND (label = "KG" OR name = "Kilo-Grams")
这是因为运算符优先级,因此您必须使用()
来排除条件。
说明:使用()
,它会检查id!=2
AND 部分的其余部分将被视为单个表达式,即它会检查{{1}也是。因此,如果两个部分都满足,查询将给出正确的结果。