Mysql 查找缺少特定子对象的行
我有一个翻译数据库,我需要找到没有翻译成某些核心语言的变量,以及翻译成某种语言但不是另一种语言的变量 数据库的简化版本如下所示:Mysql 查找缺少特定子对象的行,mysql,sql,Mysql,Sql,我有一个翻译数据库,我需要找到没有翻译成某些核心语言的变量,以及翻译成某种语言但不是另一种语言的变量 数据库的简化版本如下所示: 创建表变量( id int无符号主键自动递增, 名称varchar(15) ); 创建表语言( id smallint无符号主键自动递增, 名字叫瓦查尔(31), ietf varchar(5) ); 创建表转换( var_id int无符号非空, lang_id smallint无符号非空, 瓦尔·瓦尔查尔(128), 主键(变量id、语言id), 约束trans_
创建表变量(
id int无符号主键自动递增,
名称varchar(15)
);
创建表语言(
id smallint无符号主键自动递增,
名字叫瓦查尔(31),
ietf varchar(5)
);
创建表转换(
var_id int无符号非空,
lang_id smallint无符号非空,
瓦尔·瓦尔查尔(128),
主键(变量id、语言id),
约束trans_fk_var
外键(变量id)
参考变量(id),
约束trans_fk_lang
外键(lang_id)
参考语言(id)
);
插入变量(名称)值('var1')、('var2')、('var3');
在语言(名称,ietf)中插入值(“德语”、“de”)、(“西班牙语”、“es”)、(“德语(奥地利)”、“de AT”)、(“西班牙语(墨西哥)”、“es MX”);
插入转换值(1,1,‘字符串1’,(1,2,‘字符串2’,(1,3,‘字符串3’,(2,1,‘字符串4’,(2,2,‘字符串5’,(3,1,‘字符串6’);
我试图找出的问题是:
- 哪些变量未转换为至少一种语言1 和2(在本例中为var 3)
- 哪些变量转换为语言2而不是语言4(在本例中为变量1和2)
上述查询将经常执行,而且数据库很大,因此我需要查询尽可能便宜。您可以使用
分组方式和拥有。因此,你的第一个问题可以用以下措辞:
select var_id
from translations t
group by var_id
having count(*) < (select count(*) from language);
到目前为止你试过什么?
select var_id
from translations t
group by var_id
having sum(lang_id = 2) > 0 and
sum(lang_id = 4) = 0;