sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Hur man bulkar SELECT-rader med flera par i WHERE-satsen

Om du är ute efter elegant SQL kan du använda radkonstruktörer:

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

Det är dock inte alls indexvänligt och skulle inte rekommenderas på ett bord av någon större storlek. Istället kan du skapa ett bord med dina önskade par och slå ihop det med ditt bord:

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;

Eller fyll i en (tillfällig) tabell i förväg:

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. Skillnad mellan numerisk, float och decimal i SQL Server

  2. Hur man installerar och konfigurerar MaxScale för MariaDB

  3. Ansluter du till DB från ett Chrome-tillägg?

  4. Oavsett vad kan jag inte batcha MySQL INSERT-satser i Hibernate