MySQL從3個表中選擇。MySQL從3個表中選擇不同的產品
我有這些5個表:
CREATE TABLE `category` (
`c_id` int(6) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
PRIMARY KEY (c_id)
);
CREATE TABLE `product` (
`p_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) NOT NULL,
`brand` varchar(30) NOT NULL,
`image_path` varchar(100) DEFAULT NULL,
PRIMARY KEY (p_id)
);
CREATE TABLE `shop` (
`s_id` int(6) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`country` varchar(30) NOT NULL,
`province` varchar(30) NOT NULL,
`city` varchar(30) NOT NULL,
`suburb` varchar(30) NOT NULL,
`street` varchar(40) DEFAULT NULL,
`streetNumber` varchar(40) DEFAULT NULL,
`postalCode` int(4) DEFAULT NULL,
PRIMARY KEY (s_id)
) ;
CREATE TABLE product_category (
p_id INT NOT NULL,
c_id INT NOT NULL,
PRIMARY KEY (p_id, c_id),
FOREIGN KEY (p_id) REFERENCES Product(p_id) ON UPDATE CASCADE,
FOREIGN KEY (c_id) REFERENCES Category(c_id) ON UPDATE CASCADE
);
CREATE TABLE product_shop (
p_id INT NOT NULL,
s_id INT NOT NULL,
PRIMARY KEY (p_id, s_id),
FOREIGN KEY (p_id) REFERENCES product(p_id) ON UPDATE CASCADE,
FOREIGN KEY (s_id) REFERENCES shop(s_id) ON UPDATE CASCADE
);
基本上,產品可以有很多類別。一個類別可以分配給許多產品。一家商店可以有很多產品。產品可以在許多商店。
我想選擇其中category.c_id = 2,或category.c_id = 8和shop.s_id = 1個或shop.s_id = 2
我部分的方式有與此所有產品:
select *
from product inner join product_category
on product_category.p_id=product.p_id
where (product_category.c_id=2)
or (product_category.c_id=8)
這得到所有有2個,也一個大類產品編號爲8的類別編號的產品,但它得到了相同的產品兩次,如果它既有category.c_id = 8,category.c_id = 2.
然後我試着讓它獲得獨特的產品:
select DISTINCT(product.p_id) as product
from product inner join product_category
on product_category.p_id=product.p_id
where (product_category.c_id=2)
or (product_category.c_id=8)
這是現在截然不同,但沒有顯示足夠的產品或類別的信息。我想在每一行中顯示儘可能多的信息。
而下一步是隻獲取那些在shop.s_id = 1個或shop.s_id = 2
誰能幫我那裏還是更接近?謝謝!
嘗試'SELECT DISTINCT *'或'SELECT DISTINCT col1,col2 ...' –