ありますか?私はいくつかのストアドプロシージャを調査していますが、ある場所で次の行を見つけました。
DELETE BI_Appointments
WHERE VisitType != (
SELECT TOP 1 CheckupType
FROM BI_Settings
WHERE DoctorName = @DoctorName)
それは次と同じことをしますか:
DELETE FROM BI_Appointments
WHERE VisitType != (
SELECT TOP 1 CheckupType
FROM BI_Settings
WHERE DoctorName = @DoctorName)
それとも構文エラーですか、それともまったく異なるものですか?
これがT-SQLまたはMSSQL Serverであると仮定すると、違いはなく、ステートメントは同一です。最初のFROM
キーワードは、DELETE
ステートメントでは構文的にオプションです。
http://technet.Microsoft.com/en-us/library/ms189835.aspx
キーワードは2つの理由でオプションです。
まず、標準では句にFROM
キーワードが必要であるため、標準に準拠するためにそこに存在する必要があります。
第二に、キーワードは冗長ですが、それがオプションである理由ではないかもしれません。これは、SQLServerではJOIN
ステートメントでDELETE
を指定でき、最初のFROM
を必須にすると扱いにくくなるためだと思います。
たとえば、通常の削除は次のとおりです。
DELETE FROM Employee WHERE ID = @value
そして、それは次のように短縮できます。
DELETE Employee WHERE ID = @value
また、SQL Serverでは、JOIN
を使用して別のテーブルに基づいて削除できます。
DELETE Employee
FROM Employee
JOIN Site
ON Employee.SiteID = Site.ID
WHERE Site.Status = 'Closed'
最初のFROM
キーワードがオプションでない場合、上記の2番目のクエリは次のようになります。
DELETE FROM Employee
FROM Employee
JOIN Site
ON Employee.SiteID = Site.ID
WHERE Site.Status = 'Closed'
上記のクエリは完全に有効で実行されますが、読み取るのが非常に厄介なクエリです。それが単一のクエリであると言うのは難しいです。 「重複」FROM
句が原因で、2つが一緒にマッシュされたように見えます。
補足:ORDER BY
句がないため、サブクエリの例は潜在的に非決定論的です。
こんにちは友人、Oracleデータベースでの削除と削除の違いはありませんが、これはオプションですが、これは次のようなコードを書くための標準ですDELETE FROM table [ WHERE condition ]
これはsql-92標準です。常に標準的な方法でコードを開発してください。