Měli byste začít používat standardní syntaxi JOIN. Kromě toho, že je čitelnější (alespoň podle mého názoru), vás také chrání před náhodnými kartézskými spojeními, pokud zapomenete skutečnou podmínku spojení v klauzuli WHERE. Navíc je přenosný napříč téměř všemi DBMS na rozdíl od neohrabaného (+)
syntaxe používaná Oracle (která má také určitá omezení, která syntaxe JOIN nemá)
Zde je dotaz přepsaný pomocí explicitních (místo implicitních) spojení:
SELECT DISTINCT ope.ope_operationid,
ser.ser_code,
opt.opt_code,
ost.ost_code
FROM od_operation ope,
LEFT JOIN od_service_type ser ON ope.ser_id = ser.ser_id
LEFT JOIN od_operation_type opt ON opt.opt_id = ope.opt_id
LEFT JOIN od_status_type ost ON ost.ost_id = ope.ost_id
LEFT JOIN od_equipment_type eqt ON ????????
WHERE ope.opt_id = 3781
AND ope.ope_operationid = 'LAA351BP'
Upravit
Chybějící podmínka spojení na od_equipment_type
je přesně tím důvodem, proč je preferována syntaxe JOIN. Pokud je koncová čárka v původním SQL odstraněna, příkaz by vytvořil nechtěné kartézské spojení, které by mohlo mít vážný dopad na server, pokud jsou zahrnuté tabulky velké.
Se syntaxí JOIN vždy dostanete chybu syntaxe, která vám zabrání v podobných překlepech. Použití implicitních spojení způsobí chybu pouze tehdy, když ponecháte čárku v seznamu FROM, ale nikdy, pokud vynecháte podmínku spojení v WHERE