sql >> Database >  >> RDS >> Mysql

MySQL:SELECT-rijen bulksgewijs met meerdere paren in de WHERE-clausule

Als u op zoek bent naar elegante SQL, kunt u rijconstructors gebruiken:

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

Dat is echter helemaal niet index-vriendelijk en zou niet worden aanbevolen op een tafel van enige significante omvang. In plaats daarvan zou je een tafel kunnen materialiseren met je gewenste paren en die samenvoegen met je tafel:

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;

Of vul vooraf een (tijdelijke) tabel in:

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;


  1. MySQL-kill-proces is dat de gebruiker niet genoeg punten heeft PHP

  2. MySQL-shardingbenaderingen?

  3. Beste en optimale manier om de maximale waarde uit een andere tabel samen te voegen

  4. Hoe de Android-app te verbinden met de MySQL-database?