【发布时间】:2011-11-20 08:36:22
【问题描述】:
我正在寻找比以下查询更有效和/或更易于阅读的内容。解释问题的最佳方式是提供样本。
假设 MySQL 中的以下表结构表示我正在创建的应用程序中各种字符串的本地化上下文。
create table LOCALIZATION_TABLE (
SET_NAME varchar(36) not null,
LOCALE varchar(8) not null default '_',
ENTRY_KEY varhcar(36) not null,
ENTRY_VALUE text null
);
alter table LOCALIZATION_TABLE
add constraint UQ_ENTRY
unique (SET_NAME, LOCALE, ENTRY_KEY);
假设表格中输入了以下值:
insert into LOCALIZATION_TABLE (SET_NAME, LOCALE, ENTRY_KEY, ENTRY_VALUE)
values
('STD_TEXT', '_', 'HELLO', 'Hello!'),
('STD_TEXT', '_', 'GOODBYE', 'Goodbye.'),
('STD_TEXT', 'ge', 'GOODBYE', 'Lebewohl')
;
我想选择德语(“ge”)的所有可用条目,如果不可用,则默认使用英文文本(“_”)。我目前使用的查询如下:
select * from LOCALIZATION_TABLE where SET_NAME = 'STD_TEXT' and LOCALE = 'ge'
union
select * from LOCALIZATION_TABLE where SET_NAME = 'STD_TEXT' and LOCALE = '_'
and ENTRY_KEY not in (
select ENTRY_KEY from LOCALIZATION_TABLE where BUNDLE = 'STD_TEXT' and LOCALE = 'ge'
)
我真的不喜欢这个查询的外观,我确信必须有更简洁的东西可以代替。任何帮助或正确方向的线索将不胜感激。虽然这可行,但它似乎并不正确。
【问题讨论】: