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