有没有办法检查同一个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 |
+----+--------------+---------------+-------------+
说我想要所有员工,无论是名字还是姓名中的名字都是丹尼尔或彼得 - 因此,我想要ids 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被解释为布尔值。
答案 0 :(得分:0)
正如我现在没有其他方法可以更快地执行它。无论如何,在最坏的情况下,你必须将每个名字,姓名和姓氏进行比较。
你也可以将推荐的Imran Ali连接起来的名字,中间名和姓,但是...... 1.它不安全。例如,当名字的结尾和中间名的开头是你的一些名字时,你可以匹配。 它会执行更长时间。当你检查相等时,系统在第一次不相等之后中断比较字符,但是当你检查入口时,系统也必须比较所有后续字符。
答案 1 :(得分:0)
SELECT *
FROM employee
WHERE 1 IN('daniel' IN (first_name,middle_name,last_name),'peter' IN (first_name,middle_name,last_name));