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 (
  ('example@sqldat.com'  , '555-1212'),
  ('example@sqldat.com', '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 'example@sqldat.com' AS email, '555-1212' AS phone
UNION ALL
  SELECT 'example@sqldat.com', '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
  ('example@sqldat.com'  , '555-1212'),
  ('example@sqldat.com', '888-1212')
  -- etc.
;

SELECT * FROM email_phone_notes NATURAL JOIN foo;