* p_id *フィールドは、両方のテーブルを結ぶ共通のフィールドであるため、製品とorderitemINNER JOIN
テーブルの間で使用する必要があります。2つのテーブル間で一致するレコードのみをフェッチします。結合は一致するすべてのレコードと一致します。ordereditem値はすでに*p_id*列でグループ化されているため、COUNT(p_id)情報の出力に基づく注文数とともに、製品テーブルからのすべての一意の製品情報が表示されます。INNER JOIN
SQL Fiddleのデモを表示するには、ここをクリックしてください。
スクリプト:
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