3

私は SQL Server から来ていますが、次のクエリが機能しないことに驚きました。

DELETE FROM user_job_titles WHERE id IN (
"c836d018-1d12-4507-a268-a4d80d6d3f54",
"d0961a90-7d31-4c4c-9c1b-671115e3d833",
"62dda420-6e62-4017-b41d-205c0aa82ead"
)

user_job_titles には次の列があります。

id
user_id
job_title_id

エラーは次のとおりです。

ERROR:  column "c836d018-1d12-4507-a268-a4d80d6d3f54" does not exist
LINE 2: "c836d018-1d12-4507-a268-a4d80d6d3f54"

最新のpostgresqlバージョンでpgAdminを使用しています。このクエリを実行する他の方法はありますか?

4

2 に答える 2

5

文字列定数には一重引用符を使用します。

DELETE FROM user_job_titles
    WHERE id IN ('c836d018-1d12-4507-a268-a4d80d6d3f54',
                 'd0961a90-7d31-4c4c-9c1b-671115e3d833',
                 '62dda420-6e62-4017-b41d-205c0aa82ead'
                );

二重引用符は、テーブル名と列名で使用されるエスケープ文字です。したがって、エラー。

于 2016-03-05T13:32:46.503 に答える
2

文字列リテラルを引用する必要があります'

DELETE FROM user_job_titles 
WHERE id IN (
'c836d018-1d12-4507-a268-a4d80d6d3f54',
'd0961a90-7d31-4c4c-9c1b-671115e3d833',
'62dda420-6e62-4017-b41d-205c0aa82ead'
);

私は SQL Server から来ていますが、次のクエリが機能しないことに驚きました。

次に、SET QUOTED_IDENTIFIERASがありOFFます。デフォルトでは ですON

SET QUOTED_IDENTIFIER が ONの場合、二重引用符で区切られたすべての文字列がオブジェクト識別子として解釈されます

小切手:

SET QUOTED_IDENTIFIER OFF;
SELECT "A"


-- The same behaviour as in Postgresql
SET QUOTED_IDENTIFIER ON;
SELECT "A"
-- Invalid column name 'A'.

LiveDemo

于 2016-03-05T13:32:27.650 に答える