Mysql
 sql >> база данни >  >> RDS >> Mysql

Подобрете MySQL заявката с IN подзаявка

MySQL не може да превключи водещата и управляваната таблица в IN клауза. Това ще бъде коригирано в 6.0 .

Засега можете да го пренапишете така (изисква 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

Тъй като използвате EAV модел, който може да искате да направите уникален индекс на (attribute_name, item_id) в този случай можете да използвате обикновено присъединяване:

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. Как да създадете база данни с Liquibase

  2. Премахване на дублирани SQL записи, за да се разреши уникален ключ

  3. Красноречиво намиране на реда с максимална стойност с групиране

  4. Обработка на сложни клаузи WHERE с PHP Query Builder

  5. Съхранени процедури в MySql:Как да изберете от таблицата с процедури?