有没有一种方法可以检查同一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/