Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :comment regrouper des lignes SELECT avec plusieurs paires dans la clause WHERE

Si vous recherchez du SQL élégant, vous pouvez utiliser des constructeurs de ligne :

SELECT * FROM email_phone_notes WHERE (email, phone) IN (
  ('[email protected]'  , '555-1212'),
  ('[email protected]', '888-1212')
  -- etc.
);

Cependant, ce n'est pas du tout adapté à l'index et ne serait pas recommandé sur une table de taille significative. Au lieu de cela, vous pouvez matérialiser une table avec vos paires souhaitées et la joindre à votre table :

SELECT * FROM email_phone_notes NATURAL JOIN (
  SELECT '[email protected]' AS email, '555-1212' AS phone
UNION ALL
  SELECT '[email protected]', '888-1212'
-- etc.
) t;

Ou bien pré-remplir une table (temporaire) :

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
  ('[email protected]'  , '555-1212'),
  ('[email protected]', '888-1212')
  -- etc.
;

SELECT * FROM email_phone_notes NATURAL JOIN foo;