我有一个网络(内部网)工具,可以将用户列表解析为名字和姓氏数组。然后我循环遍历该数组(可能是 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')
);
关于mysql - 当您需要一对字段同时匹配时,如何执行类似 IN() 的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10611194/