Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:come caricare in massa le righe SELECT con più coppie nella clausola WHERE

Se stai cercando un SQL elegante, puoi usare i costruttori di righe:

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

Tuttavia, non è affatto compatibile con l'indice e non sarebbe consigliato su una tabella di dimensioni significative. Invece, potresti materializzare un tavolo con le coppie desiderate e unirlo al tuo tavolo:

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;

Oppure precompila una tabella (temporanea):

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;