有没有一种方法可以检查同一in子句中是否存在多个值,而无需重写同一IN子句?



Employee Table:
+----+--------------+---------------+-------------+
| id |  first_name  |  middle_name  |  last_name  |
+----+--------------+---------------+-------------+
| 1  |     Ian      |    Daniel     | de Villiers |
| 2  |     Karien   |               | Tolmie      |
| 3  |     John     |    Peter      | Green       |
| 4  |     Daniel   |    Silie      | von Guns    |
| 5  |     Francois |    Roos       | Krans       |
+----+--------------+---------------+-------------+


假设我希望所有名字,中间名或姓氏均为Daniel或Peter的员工-因此,我想要ID 1、3和4。

我知道如何执行此操作的唯一方法是:

SELECT id
FROM   employees
WHERE  ( first_name IN ( "Daniel", "Peter" ) )
        OR ( middle_name IN ( "Daniel", "Peter" ) )
        OR ( last_name IN ( "Daniel", "Peter" ) )


如果我要测试多个值或IN子句中的值过多,这可能会很长。

我试过了

SELECT id
FROM   employees
WHERE  ( first_name OR middle_name OR last_name IN ( "Daniel", "Peter" ) )


但我认为这将导致first_name被解释为布尔值。

最佳答案

由于我现在没有其他方法可以更快地执行它。无论如何,在最坏的情况下,您必须将名字,中间名和姓氏与名字数组进行比较。

您还可以按照推荐的Imran Ali的方式连接名字,中间名和姓氏,但是。
1.不安全。例如,当名字的结尾和中间的名字开始成为您的某些名字时,您可以进行匹配。
2.它将执行更长的时间。当您检查相等性时,系统会在比较第一个非相等字符后中断比较字符,但是当您检查入口时,系统也必须比较所有后续字符。

关于mysql - MySQL-检查同一IN子句中是否有多个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36765382/

10-11 04:59