Witam. Mam dwie wersje zapytań z 3 i 4 tabel. W zapytaniu z trzech tabel wszystkie połączone są kolumną products_id i wszystko działa OK :
SELECT p.products_model , pd.products_name , p.products_quantity , p.products_price, p.products_status, p2c.categories_id
FROM products_description pd, products p, products_to_categories p2c
WHERE pd.products_id = p.products_id AND p.products_id = p2c.products_id
ORDER BY products_name;
Po dodaniu czwartej tabeli : categories_description zawierającej categories_id i categories_name (brak products_id) która zamiast numeru kategorii (p2c.categories_id) wyświetla nazwę kategorii (cd.categories_name) czas wykonania zapytania zwiększył się ok.10-krotnie(15sek na localhost). Moje zapytanie z 4 tabel wygląda tak:
SELECT p.products_model , pd.products_name , p.products_quantity , p.products_price, p.products_status, cd.categories_name
FROM products_description pd, products p, products_to_categories p2c, categories_description cd
WHERE pd.products_id = p.products_id AND p.products_id = p2c.products_id AND p2c.categories_id = cd.categories_id
ORDER BY products_name;
Tabela products_to_categories zawiera: products_id i categories_id.
W jaki sposób prawidłowo konstruować powyższy typ zapytań jeśli wszystkie tabele nie są połączone wspólnym polem aby nie produkować iloczynów kartezjańskich (LEFT JOIN , podzapytania)? Przeszukałem różne przykłady,kursy,porady ale nic zbliżonego do mojego nie znalazłem. Chciałbym jeszcze sporo zmienić w tym zapytaniu (np.stawka VAT = następna tabela , products_status zamiast 0 i 1 = aktywny i nieaktywny itp.) a nie mam zamiaru zawracać głowy z każdym małym problemikiem.
Używam MySQL5, Delphi DBGrid , a struktura bazy typowa z e-shopu, indeksy na w/w polach tabel są.
Dziękuję za wszelkie porady.
R.J.