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

Popraw zapytanie MySQL za pomocą podzapytania IN

MySQL nie można zamienić tabeli wiodącej i sterowanej w IN klauzula. Zostanie to poprawione w 6.0 .

Na razie możesz to przepisać w ten sposób (wymaga JOIN ):

SELECT  i.*
FROM    (
        SELECT  DISTINCT item_id
        FROM    item_attributes a
        WHERE   a.attribute_name = 'SomeAttribute'
                AND a.attribute_value = 'SomeValue'
        ) ai
JOIN    items i
ON      i.id = ai.item_id

Ponieważ używasz EAV model, na którym możesz chcieć utworzyć unikalny indeks na (attribute_name, item_id) w takim przypadku możesz użyć zwykłego przyłączenia:

SELECT  i.*
FROM    item_attributes ai
JOIN    items i
ON      i.id = ai.item_id
WHERE   a.attribute_value = 'SomeValue'
        AND a.attribute_name = 'SomeAttribute'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd podczas konfigurowania hibernacji 5.0.1 i MySQL

  2. Zduplikowane wpisy w DB

  3. Czy powinienem używać ON DELETE CASCADE, :dependent => :destroy, czy obu?

  4. Jak wybrać najnowszy rekord każdej godziny w ciągu dnia?

  5. Codeigniter Rekord aktywny POSIADAJĄC / GDZIE db.field =db.field