mysql - 当您需要一对字段同时匹配时,如何执行类似 IN() 的操作?

标签 mysql

我有一个网络(内部网)工具,可以将用户列表解析为名字和姓氏数组。然后我循环遍历该数组(可能是 50 次),例如:

SELECT * FROM users WHERE last_name = array[x].last AND first_name = array[x].first

是否有可能以某种方式同时查询所有这些名字/姓氏组合,就像具有两个属性的 IN 语句一样。

如果可能的话,我会喜欢一个单一的查询,它返回找到的每个匹配项的记录集(我想就像一个带有 2 个属性的 IN 语句)。我对 MySQL 不是很了解,但我猜这就像让一个子查询收集任何名字匹配的列表,然后另一个子查询收集任何姓氏匹配。

实际上你知道,如果我只是在那里进行查询 where first_name IN () OR last_name in () 我会得到一个包含任何可能匹配项的结果集,然后我可以遍历该结果集最后检查名字和姓氏的匹配位置。这个数据库很快,但它很大。比如有8000+用户

最佳答案

这是一个很好的 MySQL 技巧 row constructors :

CREATE TABLE users (
    first VARCHAR(50),
    last Varchar(50)
);

INSERT INTO users (first, last) VALUES
('Bill', 'Gates'), ('Steve', 'Jobs'), ('Jon', 'Skeet');

SELECT *
  FROM users
 WHERE (first, last) = ('Bill', 'Gates')
    OR (first, last) = ('Steve', 'Jobs')
    OR (first, last) = ('Jon', 'Skeet');

http://sqlfiddle.com/#!2/6ef9a/2

它也适用于 IN:

SELECT *
  FROM users
 WHERE (first, last) IN(
   ('Bill', 'Gates'), ('Steve', 'Jobs'), ('Jon', 'Skeet')
);

http://sqlfiddle.com/#!2/6ef9a/6

关于mysql - 当您需要一对字段同时匹配时,如何执行类似 IN() 的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10611194/

相关文章:

php - MySQL - 计算左连接没有性能

c++ - 使 MySQL C API 与 MinGW 一起工作

php - 如何使用 csv 更新我在 MYSQL 中的记录

php - Magento 如何 getLinkFile()

php - 多级登录 codeigniter 未成功重定向

mysql - 如何计算给定状态的列状态总时间

mysql - 从 bugzilla 数据库 (MySQL) 检索错误时出现 DjangoUnicodeDecodeError

javascript - 使用 AJAX 从 WordPress 中处理 SQL

mysql - 如何先使用MySql和Entity Framework 4.1代码

mysql查询日志表中值的变化