Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Wie man SELECT-Zeilen mit mehreren Paaren in der WHERE-Klausel stapelt

Wenn Sie nach elegantem SQL suchen, könnten Sie Zeilenkonstruktoren verwenden:

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

Das ist jedoch überhaupt nicht indexfreundlich und würde auf einem Tisch von nennenswerter Größe nicht empfohlen. Stattdessen könnten Sie eine Tabelle mit Ihren gewünschten Paaren materialisieren und diese mit Ihrer Tabelle verbinden:

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;

Oder füllen Sie eine (temporäre) Tabelle vorab aus:

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;