sql >> Databáze >  >> RDS >> Oracle

SQL dotaz pro vrácení řádku, i když nebyl nalezen, s alespoň v parametrech

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




  1. Mysql:Pořadí výsledků s select <fieldname> from se liší od pořadí výsledků s select * from

  2. podmíněné připojení v mysql

  3. Agregáty a dělení

  4. Chyba 'Samopodepsaný certifikát' během dotazu na databázi Postgres hostovanou Heroku z aplikace Node.js