我有一個categories
表(CATEGORY_ID,CATEGORY_NAME)與下列類型類別:過濾產品所需的類ID和OR類別ID的
Website1
Website2
Product_type1
Product_type2
red
blue
green
wood
plastic
metal
一個products
表(PROD_ID,PROD_NAME ...等)和鏈接表product_cateogries
(id,prod_id,category_id)。
我試圖運行查詢來過濾這些值,但某些類別是必需的,有些是X或X.例如,我希望能夠選擇所有Website1
和Product_type2
產品,它們是紅色或藍色。
我的第一個想法是,我可以IN (Product_type2_id, Website2_id, red_id, blue_id)
但這使得Product_type2_id
和Website2_id
可選時,他們應該是必需的。並且使用GROUP BY prod_id HAVING count(distinct category_id) = 4)
可確保在產品只能有一種顏色時找到所有colours_id。是否需要某個子查詢?
表:
類別:
id (int)
category_name (varchar)
PRODUCT_CATEGORY:
id (int)
product_id, (int)
category_id (int)
產品:
prod_id (int)
prod_image
prod_price
SQL小提琴:
http://sqlfiddle.com/#!9/32ec8
UPDATE:
下面的查詢現在不正是我想要的東西,看來雖然有點亂,想應該有一個更清潔的方式?
SELECT p.*
FROM products p
LEFT JOIN product_category pc_w1 ON pc_w1.product_id = p.prod_id AND pc_w1.category_id = 3
LEFT JOIN product_category pc_pt2 ON pc_pt2.product_id = p.prod_id AND pc_pt2.category_id = 1
LEFT JOIN product_category pc_rb ON pc_rb.product_id = p.prod_id AND pc_rb.category_id IN (11)
LEFT JOIN product_category pc_rb1 ON pc_rb1.product_id = p.prod_id AND pc_rb1.category_id IN (1,12)
WHERE
pc_w1.product_id IS NOT NULL AND pc_pt2.product_id IS NOT NULL AND
(
pc_rb.product_id IS NOT NULL AND
pc_rb1.product_id IS NOT NULL
)
GROUP BY p.prod_id
顯示錶的模式。另外,您如何知道哪些是必需的?哪些是可選的?信息是在表中,還是隻是查詢的一部分? –
我看不出在哪裏打印出所有的模式,但我已經添加了所有你需要的數據。 – john
其餘的問題呢? –