您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MySQL:如何在WHERE子句中对具有多对的SELECT行进行批量处理

MySQL:如何在WHERE子句中对具有多对的SELECT行进行批量处理

如果您追求优雅的sql,则可以使用行构造函数

SELECT * FROM email_phone_notes WHERE (email, phone) IN (
  ('foo@bar.com'  , '555-1212'),
  ('test@test.com', '888-1212')
  -- etc.
);

但是,这根本不是索引友好的,也不建议在任何大的表上使用。取而代之的是,您可以实现具有所需对的表,然后将其与表连接:

SELECT * FROM email_phone_notes NATURAL JOIN (
  SELECT 'foo@bar.com' AS email, '555-1212' AS phone
UNION ALL
  SELECT 'test@test.com', '888-1212'
-- etc.
) t;

否则预填充(临时)表:

CREATE TEMPORARY TABLE foo (PRIMARY KEY (email, phone)) Engine=MEMORY
  SELECT email, phone FROM email_phone_notes WHERE FALSE
;

INSERT INTO foo
  (email, phone)
VALUES
  ('foo@bar.com'  , '555-1212'),
  ('test@test.com', '888-1212')
  -- etc.
;

SELECT * FROM email_phone_notes NATURAL JOIN foo;
MySQL 2022/1/1 18:35:17 有351人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶