Posiadam taką strukturę bazy (wersja skrócona)
Tabela Product:
product_id, name, status
1, Product 1, 1
2, Product 2, 1
3, Product 3, 1
4, Product 4, 1
99, Product 99, 1
Tabela Box:
box_id, name
1, Box 1
Tabela Product_To_Box:
box_id, product_id
1, 1
1, 2
1, 3
1, 4
1, 99
Tabela Url: (id = product_id z tabeli 'product')
url_id, id, url, language_id
1, 1, http://wp.pl, 1
2, 1, http://wp.pl, 2
3, 2, http://google.pl, 1
Tabela Language:
language_id, name
1, English
2, Polski
Nie ma problemu gdy potrzebuję pobrać wszystkie produkty z tabeli 'product', które nie wystepują w tabeli 'url' a mają przypisany jakiś 'box_id'.
Robię to zapytaniem
SELECT p.product_id AS id FROM product p LEFT JOIN product_to_box p2b ON (p.product_id = p2b.product_id) WHERE NOT EXISTS (SELECT u.id FROM url u WHERE p.product_id = u.id) AND p2b.box_id = '1'
Zwróci 3 produkty:
Product 3
Product 4
Product 99
Potrzebuje jednak zapytanie, które zwróci produkty tak jak wyżej ale dodatkowo też produkty które nie mają powiązania do każdego języka z tabeli 'language'
Zapytanie powinno zwrócic 4 produkty:
Product 2 - zwróci ten produkt bo w tabeli 'url' nie ma wpisu dla language_id = 2
Product 3
Product 4
Product 99
Jak bym dodał kolejny język do tabeli 'language', np. Vietnam (language_id = 3) a tabela 'url' wyglądałby tak
1, 1, http://wp.pl, 1
2, 1, http://wp.pl, 2
3, 2, http://google.pl, 1
3, 2, http://google.pl, 2
3, 3, http://google.com, 1
3, 3, http://google.com, 2
3, 4, http://onet.pl, 1
3, 4, http://onet.pl, 2
3, 99, http://interia.pl, 1
3, 99, http://interia.pl, 2
to zapytanie powinno zwrócić wszystkie produkty bo w tabeli 'url' nie ma odniesienia do language_id = 3
Product 1
Product 2
Product 3
Product 4
Product 99
pozdrawiam
Adrian