我创建了PostgreSQL的这些表基于这个话题:重写选择SQL查询PostgreSQL的
Database design for user settings
-- TABLE SETTING
CREATE TABLE SETTING(
ID INTEGER NOT NULL,
DESCRIPTION TEXT,
CONSTRAINED TEXT,
DATA_TYPE TEXT,
MIN_VALUE TEXT,
MAX_VALUE TEXT
)
;
-- ADD KEYS FOR TABLE SETTING
ALTER TABLE SETTING ADD CONSTRAINT KEY34 PRIMARY KEY (ID)
;
-- TABLE ALLOWED_SETTING_VALUE
CREATE TABLE ALLOWED_SETTING_VALUE(
ID INTEGER NOT NULL,
SETTING_ID INTEGER,
ITEM_VALUE TEXT,
CAPTION TEXT
)
;
-- CREATE INDEXES FOR TABLE ALLOWED_SETTING_VALUE
CREATE INDEX IX_RELATIONSHIP16 ON ALLOWED_SETTING_VALUE (SETTING_ID)
;
-- ADD KEYS FOR TABLE ALLOWED_SETTING_VALUE
ALTER TABLE ALLOWED_SETTING_VALUE ADD CONSTRAINT KEY35 PRIMARY KEY (ID)
;
-- TABLE USER_SETTING
CREATE TABLE USER_SETTING(
ID INTEGER NOT NULL,
USER_ID INTEGER,
SETTING_ID INTEGER,
ALLOWED_SETTING_VALUE_ID INTEGER,
UNCONSTRAINED_VALUE TEXT
)
;
-- CREATE INDEXES FOR TABLE USER_SETTING
CREATE INDEX IX_RELATIONSHIP15 ON USER_SETTING (SETTING_ID)
;
CREATE INDEX IX_RELATIONSHIP17 ON USER_SETTING (ALLOWED_SETTING_VALUE_ID)
;
-- ADD KEYS FOR TABLE USER_SETTING
ALTER TABLE USER_SETTING ADD CONSTRAINT KEY36 PRIMARY KEY (ID)
;
但是当我运行选择SQL查询,我得到的错误,因为它是为MySQL:
-- Show settings for a given user
select
US.user_id
, S1.description
, S1.data_type
, case when S1.constrained = 'true'
then AV.item_value
else US.unconstrained_value
end value
, AV.caption
from USER_SETTING US
inner join SETTING S1
on US.setting_id = S1.id
left outer join ALLOWED_SETTING_VALUE AV
on US.allowed_setting_value_id = AV.id
where US.user_id = 234
结果
ERROR: syntax error at or near "value"
LINE 8: end value
Howe我可以重写这个SQL查询PostgreSQL?
这是有效的标准SQL,尝试添加'AS':'AS值'(我刚刚在小提琴上试过,这工作)。似乎是一个奇怪的解析错误。 – dnoeth
是的,这解决了这个问题。谢谢! –