У меня есть магазин, в котором есть уникальные товары, которые обладают уникальными свойствами.Итак, есть три таблицы: магазины, продукты и свойства.Недавно в системе была ошибка, из-за которой некоторые продукты в некоторых магазинах получали два разных свойства «name».Один - просто «имя», а другой - «ярлык».
Мне нужен запрос, который возвращает идентификаторы магазинов, в которых есть продукты с двумя разными именами.
SELECT
stores.id
FROM
stores
INNER JOIN
products ON products.store_id = stores.id
INNER JOIN
properties ON properties.product_id = products.id
WHERE
properties.name IN ('Name' , 'Label')
GROUP BY
products.id
HAVING
COUNT(DISTINCT properties.name) = 2;
Это то, что я до сих пор.Я стараюсь избегать подзапросов, поскольку продукты и свойства представляют собой очень большие таблицы, и я застрял на этом этапе.Я не могу логически понять, почему этот запрос возвращает магазины, которые не имеют свойств как name, так и label.Я дважды проверил, и ни у одного из продуктов нет двух свойств "name" или "label", только по одному из каждогоТак что это не приведет к ложному положительному результату.
Редактировать:
Схема
Table: Stores
Columns:
id int(11) AI PK
domain_id int(11)
name varchar(255)
description varchar(255)
address varchar(255)
details longtext
Table: products
Columns:
id int(11) AI PK
store_id int(11)
price varchar(255)
Table: properties
Columns:
id int(11) AI PK
product_id int(11)
name varchar(255)
value varchar(255)
position int(11)
Данные
Store Data Structure
{ id: 2341, domain_id: 4, name: "East LA", description: nil, address: nil, details: nil }
Products Data Structure
{ id: 6482773, store_id: 2341, price: "5.00" }
Property Data Sturcture
{ id: 9132472, product_id: 6482773, name: "Name", value: "Paper Plates", position: 1 }
{ id: 9132472, product_id: 6482773, name: "Label", value: "Paper Plates", position: 2 }
Вернуть ТОЛЬКО идентификаторы магазина.В этом случае он вернет 2341, так как имеет свойство label и name.