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
が、私はこれでそこに途中だすべての製品を選択したいと思います
:8のカテゴリIDを持つ2とも製品のカテゴリIDを持つすべての製品を取得しますが、それはcategory.c_id = 8とcategory.c_idの両方を持っている場合、それは二度同じ製品を取得
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.
次に、ユニークな商品を得るためにこれを試しました:
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
誰も私がそこに着くか、近づく助けることができますか?ありがとう!
試し '* DISTINCT SELECT'や 'DISTINCT COL1、COL2を選択...' –