Вы должны использовать INNER JOIN
между продукты и orderitem таблицы в поле * p_id *, потому что это общее поле, связывающее обе таблицы. INNER JOIN
будет извлекать только совпадающие записи между двумя таблицами. Соединение будет соответствовать всем соответствующим записям, так как значения ordereditem уже сгруппированы по столбцу * p_id *, вы увидите всю уникальную информацию о продукте из таблицы продуктов вместе с количеством заказов на основе вывода информации COUNT (p_id).
Click here to view the demo at SQL Fiddle.
Script:
CREATE TABLE products
(
p_id INT NOT NULL
, p_name VARCHAR(20) NOT NULL
, p_image_path VARCHAR(255) NOT NULL
);
CREATE TABLE orderitem
(
orderid INT NOT NULL
, p_id INT NOT NULL
);
INSERT INTO products (p_id, p_name, p_image_path) VALUES
(1, 'product 1', '~\image 1'),
(2, 'product 2', '~\image 2'),
(3, 'product 3', '~\image 3');
INSERT INTO orderitem (orderid, p_id) VALUES
(1, 2),
(1, 1),
(1, 3),
(1, 2),
(1, 2),
(1, 1);
SELECT p.p_id
, p.p_name
, p.p_image_path
, COUNT(o.p_id) AS orderedcount
FROM products p
INNER JOIN orderitem o
ON p.p_id = o.p_id
GROUP BY p.p_id
ORDER BY orderedcount DESC;
Выход:
P_ID P_NAME P_IMAGE_PATH ORDEREDCOUNT
---- ---------- ------------ ------------
2 product 2 ~image 2 3
1 product 1 ~image 1 2
3 product 3 ~image 3 1