Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:Jak zbiorczo SELECT wierszy z wieloma parami w klauzuli WHERE

Jeśli szukasz eleganckiego SQL, możesz użyć konstruktorów wierszy:

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

Jednak nie jest to wcale przyjazne dla indeksów i nie byłoby zalecane na stole o dużym rozmiarze. Zamiast tego możesz zmaterializować stół z wybranymi parami i połączyć go ze swoim stołem:

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;

Albo wstępnie wypełnij (tymczasową) tabelę:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP + MySql + Procedury składowane, jak uzyskać dostęp do wartości wyjściowej?

  2. Railsy z bazą danych w pamięci

  3. Instrukcja przypadku w MySQL

  4. Procedura składowana MySQL spowodowała `Niezsynchronizowane polecenia`

  5. mysql jak zwiększenie wydajności