gpt4 book ai didi

mysql - 查找缺少某些子项的行

转载 作者:可可西里 更新时间:2023-11-01 08:58:03 24 4
gpt4 key购买 nike

我有一个翻译数据库,我需要找到未翻译成某些核心语言的变量,以及已翻译成一种特定语言但未翻译成另一种语言的变量。

数据库的简化版本如下所示:

CREATE TABLE var (
id int unsigned primary key auto_increment,
name varchar(15)
);

CREATE TABLE language (
id smallint unsigned primary key auto_increment,
name varchar(31),
ietf varchar(5)
);

CREATE TABLE translation (
var_id int unsigned not null,
lang_id smallint unsigned not null,
val varchar(128),
PRIMARY KEY(var_id, lang_id),
CONSTRAINT trans_fk_var
FOREIGN KEY(var_id)
REFERENCES var(id),
CONSTRAINT trans_fk_lang
FOREIGN KEY(lang_id)
REFERENCES language(id)
);


insert into var (name) values ('var1'),('var2'),('var3');
insert into language (name, ietf) values ('German', 'de'), ('Spanish', 'es'), ('German (Austria)', 'de-AT'), ('Spanish (Mexico)', 'es-MX');
insert into translation values (1,1, 'string 1'), (1,2, 'string 2'), (1,3, 'string 3'), (2,1, 'string 4'), (2,2, 'string 5'), (3,1, 'string 6');

我想弄清楚的查询是:

  • 哪些变量没有被翻译成至少一种语言 1和 2(在此示例中为 var 3)
  • 哪些变量被翻译成语言 2 而不是语言 4(在这个例子中是变量 1 和 2)

上述查询会经常执行,而且数据库很大,所以我需要查询尽可能便宜。

最佳答案

您可以使用group byhaving。所以你的第一个问题可以表述为:

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;

关于mysql - 查找缺少某些子项的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55724786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com