仅查询if子句返回false mysql

时间:2015-07-28 10:43:04

标签: mysql

我正在试图找出一种方法来使用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 = ?
}

谢谢。

2 个答案:

答案 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}也是。因此,如果两个部分都满足,查询将给出正确的结果。