MySQL chọn từ 3 bảng.MySQL chọn các sản phẩm riêng biệt từ 3 bảng
Tôi có những 5 bảng:
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
);
Về cơ bản, một sản phẩm có thể có nhiều loại. Một thể loại có thể được gán cho nhiều sản phẩm. Một cửa hàng có thể có nhiều sản phẩm. Một sản phẩm có thể ở nhiều cửa hàng.
Tôi muốn chọn tất cả các sản phẩm mà các category.c_id = 2, hoặc category.c_id = 8 và shop.s_id = 1 hoặc shop.s_id = 2.
Tôi là một phần con đường đó với điều này :
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)
đó được tất cả các sản phẩm mà có một id chủng loại 2 và cũng sản phẩm với một id chủng loại 8, nhưng nó được sản phẩm tương tự hai lần nếu nó có cả category.c_id = 8 và category.c_id = 2.
Sau đó, tôi đã thử cách này để làm cho sản phẩm độc đáo:
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)
Điều này giờ đây khác biệt nhưng không hiển thị đủ thông tin về sản phẩm hoặc danh mục. Tôi muốn hiển thị càng nhiều thông tin càng tốt trong mỗi hàng.
Và bước tiếp theo là để chỉ nhận được những cái nơi shop.s_id = 1 hoặc shop.s_id = 2.
bất cứ ai có thể giúp tôi đạt được điều đó hoặc nhận được gần gũi hơn? Cảm ơn!
thử 'CHỌN DISTINCT *' hoặc 'CHỌN DISTINCT col1, col2 ...' –