sql >> Databáze >  >> RDS >> Mysql

MySQL:Jak hromadně SELECT řádky s více páry v klauzuli WHERE

Pokud hledáte elegantní SQL, můžete použít konstruktory řádků:

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

To však není vůbec vhodné pro indexování a nedoporučuje se to na stole jakékoli významné velikosti. Místo toho můžete zhmotnit stůl s požadovanými páry a spojit ho se svým stolem:

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;

Nebo předvyplňte (dočasnou) tabulku:

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. Aplikace Django pro více nájemců:změna databázového připojení na žádost?

  2. Existuje v Oracle funkce, která vypočítá rozdíl mezi dvěma daty?

  3. Jak zkontrolovat velká písmena v MySQL?

  4. Kdy bych měl použít složený index?