1

我有这张桌子:

(`id`, `name`, `type`, `price`) 
(1, 'cats', 1, 12.25),
(2, 'dogs', 0, 11.35),
(3, 'house', 1, 7.25),
(4, 'cats2', 2, 5.26);

我需要选择所有数据,但如果类型为 1,我需要获取价格超过 10 的商品。我创建此查询:

SELECT * 
FROM  `items` 
WHERE IF(TYPE =  "1", price > 10, 1 = 1) 

效果很好,但也许可以写得更聪明或以其他方式?也许不需要“1 = 1”?

我想知道你的建议,谢谢

4

1 回答 1

2

1=1是无意义的,但你IF不是。您可以只使用1

SELECT * 
FROM  `items` 
WHERE IF(TYPE =  "1", price > 10, 1) 

- 因为 MySQL 将表达式评估为 bool(实际上是 int) - 所以1意味着“真”。

但另一方面,您的条件有逻辑等价物:

SELECT * 
FROM  `items` 
WHERE `price`>10 OR `type`!="1"

但是,我在另一个问题中遇到过这种情况,经过一些研究,我发现它IF更快,即使它看起来更复杂。

于 2013-11-10T14:58:33.897 回答