Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL:Como agrupar linhas SELECT com vários pares na cláusula WHERE


Se você procura SQL elegante, pode usar construtores de linha:
SELECT * FROM email_phone_notes WHERE (email, phone) IN (
  ('[email protected]'  , '555-1212'),
  ('[email protected]', '888-1212')
  -- etc.
);

No entanto, isso não é amigável ao índice e não seria recomendado em uma tabela de tamanho significativo. Em vez disso, você pode materializar uma mesa com seus pares desejados e juntá-la à sua 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;

Ou então preencha previamente uma tabela (temporária):
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;