MySQL seleziona da 3 tabelle.MySQL seleziona prodotti distinti da 3 tabelle
ho questi 5 tabelle:
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
);
In sostanza, un prodotto può avere molte categorie. Una categoria può essere assegnata a molti prodotti. Un negozio può avere molti prodotti. Un prodotto può essere in molti negozi.
Vorrei selezionare tutti i prodotti in cui il category.c_id = 2, o category.c_id = 8 e la shop.s_id = 1 o shop.s_id = 2.
I am parzialmente lì con questo :
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)
che ottiene tutti i prodotti che hanno una categoria id di 2 e anche prodotti con una categoria id di 8, ma ottiene lo stesso prodotto due volte se si ha sia category.c_id = 8 e category.c_id = 2.
Quindi ho provato questo per ottenere prodotti unici:
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)
Che ora è distinto ma non mostra informazioni sufficienti sul prodotto o sulla categoria. Voglio mostrare quante più informazioni possibili in ogni riga.
E il passo successivo è quello di ottenere solo quelli in cui l'shop.s_id = 1 o shop.s_id = 2.
Qualcuno può aiutarmi a ottenere lì o avvicino? Grazie!
prova 'SELECT DISTINCT *' o 'SELEZIONARE col1 DISTINTO, col2 ...' –