sql >> Base de Datos >  >> RDS >> Mysql

MySQL:cómo agrupar filas SELECCIONAR con múltiples pares en la cláusula WHERE

Si busca SQL elegante, puede usar constructores de filas:

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

Sin embargo, eso no es compatible con los índices y no se recomendaría en una tabla de un tamaño significativo. En su lugar, podría materializar una mesa con sus pares deseados y unirlos con su mesa:

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;

O bien, complete previamente una tabla (temporal):

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;