MYSQL Inner Соединение двух таблиц по двум ключам - PullRequest
2 голосов
/ 17 марта 2010

Я делаю запрос, чтобы вернуть все пользовательские корзины покупок, хранящиеся в таблице sb_carts. Информация о продукте, хранящаяся в sb_carts, ссылается на два ключа product_sku и school_id. Для получения уникального продукта с уникальными уровнями складских запасов и т. Д. Необходимо указать оба этих параметра.

Когда я выполняю следующий запрос, он возвращает одну строку, я ожидаю 3 строки. Я попытался разбить внутреннее объединение на два отдельных объединения, но это все еще возвращает только 1 результат. соединение только по одному ключу дает желаемый результат, но может привести к неправильной настройке продукта. Левое объединение возвращает 3 строки, но некоторые данные отсутствуют для конкретного продукта

Вот упрощенный пример того, что я делаю

SELECT sb_carts.product_sku
FROM sb_carts 
INNER JOIN sb_products ON sb_products.sku = sb_carts.product_sku 
AND sb_products.school_id = sb_carts.school_id
WHERE sb_carts.order_id = 0 
AND sb_carts.user_id = 2 
GROUP BY sb_carts.cart_id

Полный запрос выглядит как

SELECT COUNT(DISTINCT sb_carts.cart_id) as quantity, 
sb_carts.* FROM sb_carts 
INNER JOIN sb_children ON sb_children.child_id = sb_carts.child_id 
INNER JOIN sb_school_entities ON sb_school_entities.school_id   = sb_children.school_id 
INNER JOIN sb_products ON sb_products.sku = sb_carts.product_sku 
AND sb_products.school_id = sb_carts.school_id LEFT JOIN sb_houses ON sb_children.house_id = sb_houses.id 
LEFT JOIN sb_refund_cart ON sb_carts.cart_id = sb_refund_cart.cart_id 
WHERE sb_carts.order_id = 0 
AND sb_carts.user_id = 2 
GROUP BY sb_carts.child_id, sb_carts.product_sku, sb_carts.school_id 
ORDER BY sb_children.dob_year, sb_children.dob_month, sb_children.dob_day ASC

Ответы [ 3 ]

1 голос
/ 17 марта 2010

Почему вы используете оператор Group By?Если вы не используете функцию в Select, такую ​​как Sum, AVG и т. Д., Это не имеет смысла для вашего porpouse.Итак, попробуйте выполнить запрос без оператора Group By: -)

Надеюсь, это поможет!

Санти!:-)

1 голос
/ 17 марта 2010

Проблема, скорее всего, GROUP BY. Это вернет только одну запись для идентификатора корзины, даже если в корзине несколько товаров. Чтобы получить то, что вы хотите, попробуйте это:

SELECT sb_carts.cart_id, sb_carts.product_sku
FROM sb_carts 
INNER JOIN sb_products ON sb_products.sku = sb_carts.product_sku 
AND sb_products.school_id = sb_carts.school_id
WHERE sb_carts.order_id = 0 
AND sb_carts.user_id = 2 
ORDER BY sb_carts.cart_id

Это вернет два столбца (идентификатор корзины и SKU) вместо одного, и все элементы для одного идентификатора корзины появятся в запросе в виде последовательных строк.

0 голосов
/ 22 февраля 2018

Mysql INNER JOIN на нескольких клавишах:

SELECT * from table1 as t1
INNER JOIN table2 as t2
ON CONCAT(t1.key1, t2.key2)=CONCAT(t2.key1, t2.key2);

То, что мы делаем здесь, - это объединение двух значений ключа и создание его видимости как одного ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...