WHERE x IN(5)vs WHERE x = 5 ...为什么要使用IN?

led*_*neb 6 mysql sql syntax

我最近注意到的一些事情是使用IN的人似乎不合适.我觉得我错过了一个技巧 - 也许有速度提升或什么?

这个查询:

SELECT * FROM pages WHERE is_visible IN ($visibility)
Run Code Online (Sandbox Code Playgroud)

为什么要用它?为什么不:

SELECT * FROM pages WHERE is_visible = $visibility
Run Code Online (Sandbox Code Playgroud)

当然,如果是这样的话:

SELECT * FROM pages WHERE is_visible 
IN ($visibility,$invisibility,$somethingelse)
Run Code Online (Sandbox Code Playgroud)

那么WHERE x IN (1,2,3)是一个更好的选择WHERE x = 1 OR x = 2 OR x = 3,对吗?但肯定这是你应该使用IN 的唯一场景吗?

无论如何,谢谢你的时间 - 我期待你的回复!

Tho*_*zer 9

也许它是未知的,$ visibility是指单个值还是多个值?不太适合你的例子,但我在其他地方看到过这种用法.

  • 我也看到了......记忆仍然困扰着我. (2认同)

Otá*_*cio 8

那么WHERE x IN (1,2,3)是一个更好的选择WHERE x = 1 OR x = 2 OR x = 3,对吗?但肯定这是你应该使用的唯一场景IN吗?

不,您也可以使用IN和子查询.

...其中的字段(从another_table中选择字段)


Ion*_*tan 5

也许动态生成$ visibility,如下所示:

$visibility = implode(', ', array_map('intval', array(1, 2, 3)));
Run Code Online (Sandbox Code Playgroud)

数组(1,2,3)可能来自不受信任的来源.


Kip*_*Kip 2

这里没有提高性能的技巧,但我认为也不会对性能造成任何影响。所以两种方式都可以。我同意你的观点,使用只有一个参数的 IN 子句看起来很有趣,但它仍然很容易理解。

我认为这种情况可能会发生,因为开发人员认为将来可能允许多个值(这样查询就不会改变)。或者可能开发人员已经习惯了可能有多个值的场景,他们只是出于习惯而这样写。

  • 基普我认为你错了。显然他没有完全理解 IN,因为 IN 与 OR 不同。如果他做了什么,他会说“那么 WHERE x IN (1,2,3) 是 WHERE x = 1 OR x = 2 OR x = 3 的更好替代方案,对吧?” (2认同)