Mysql Where ... In ... AND where ... in ... 应该只匹配相同的索引

标签 mysql where-clause

我有一个问题:

SELECT * FROM `users` 
WHERE (`firstname` LIKE 'Luke' AND `lastname` LIKE 'Skywalker') OR  
 (`firstname` LIKE 'Foo' AND `lastname` LIKE 'Bar') OR 
(`firstname` LIKE 'Tom' AND `lastname` LIKE 'Turner');

但我想通过使用 where ... in ... 使其更具可读性 我试过了

SELECT * FROM users 
WHERE `firstname` 
    IN ('Luke','Foo','Tom') AND `lastname` IN ('Skywalker','Bar','Turner');

但不幸的是,这也将匹配 "Tom Skywalker""Foo Turner" 以及您能想到的所有组合。

我必须选择名字和姓氏(可能还有更多字段,如出生日期),因为我从外部 API 获取数据,我必须检查这些名字是否在我们的系统中。

最佳答案

SELECT * 
FROM users
WHERE (firstname, lastname) 
      IN ( ('Luke', 'Skywalker') 
         , ('Foo' , 'Bar') 
         , ('Tom' , 'Turner')
         )
;

关于Mysql Where ... In ... AND where ... in ... 应该只匹配相同的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10111153/

相关文章:

java - Prepared Statements如何比Statements更好地防止SQL注入(inject)?

php - 使用 zend 框架的 SQL 查询逻辑

php - MYSQL WHERE 子句是错误的值

arrays - 过滤环回中字段的数组类型

mysql - 使用 WHERE 和 BETWEEN 对两列进行排序

html - 松散搜索,例如这样 "htlm"就会找到 "html5"

php - 在 CakePHP 中使用不同的 MySql DB 进行写入操作

MySQL - 以编程方式设置列顺序

mysql - 需要帮助优化外连接 SQL 查询

sql - 根据参数动态打开/关闭 WHERE bool 表达式