Mysql 仅当,if子句返回false时查询

Mysql 仅当,if子句返回false时查询,mysql,Mysql,我正试图找出一种方法来使用if子句在查询我的模式,基本上我需要检查表中是否有与if 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

我正试图找出一种方法来使用if子句在查询我的模式,基本上我需要检查表中是否有与if 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 = ?
}

谢谢。

了解运算符优先级,您需要括号,因为和的优先级高于或

SELECT * FROM `catutype` WHERE id!= 2 AND (label = "G" OR name = "Grams")
如果没有它们,您的语句将被解析为

SELECT * FROM `catutype` WHERE (id!= 2 AND label = "G") OR name = "Grams"

阅读有关运算符优先级的内容,需要使用括号,因为和的优先级高于或

SELECT * FROM `catutype` WHERE id!= 2 AND (label = "G" OR name = "Grams")
如果没有它们,您的语句将被解析为

SELECT * FROM `catutype` WHERE (id!= 2 AND label = "G") OR name = "Grams"
将查询更改为:

SELECT * FROM `cat_type` WHERE id!= 2 AND (label = "KG" OR name = "Kilo-Grams")
这是因为运算符优先级,因此必须使用
()
,以排除条件

说明:使用
()
,它将检查
id=2
零件的其余部分将被视为单个表达式,即它将检查
标签=“KG”或名称=“KG”
。因此,如果两个部分都满足,查询将给出正确的结果。

将查询更改为:

SELECT * FROM `cat_type` WHERE id!= 2 AND (label = "KG" OR name = "Kilo-Grams")
这是因为运算符优先级,因此必须使用
()
,以排除条件


说明:使用
()
,它将检查
id=2
零件的其余部分将被视为单个表达式,即它将检查
标签=“KG”或名称=“KG”
。因此,如果两个部分都满足,查询将给出正确的结果。

Welcome@droiddude:)Welcome@droiddude:)