我想一次查询两个表,以查找给定艺术家姓名的键。问题是,我的数据来自不同的来源,没有明确的标准来表示他们的名字(例如,姓氏姓氏与姓氏,姓氏),所以为此,我有一个包含在系统其余部分使用的明确名称的表,以及一个单独的别名表,以匹配每个艺术家的不同风格。
这是PostgreSQL,但除了文本类型它是相当标准的。如果您喜欢,可以替换不同的字符:
create table Artists (
id serial primary key,
name text,
-- other stuff not relevant
);
create table Aliases (
artist integer references Artists(id) not null,
name text not null
);
现在我希望能够在一个查询中查询两组名称以获得适当的id。有什么办法吗?例如
select id from ??? where name = 'Bloggs, Joe';
我对修改我的模式中"名字"的概念不感兴趣;是更结构化的东西,例如,分开的名字和姓氏,因为它不适合应用程序。我的大多数来源都没有对数据进行结构化,有时其中一个或另一个名字是未知的,它可能是一个笔名,或者有时是"艺术家"。可以是一个实体,比如工作室。
我想你要:
select a.id
from artists a
where a.name = 'Bloggs, Joe' or
exists (select 1
from aliases aa
where aa.artist = a.id and
aa.name = 'Bloggs, Joe'
);
实际上,如果您只想要id(而不是其他列),那么您可以使用:
select a.id
from artists a
where a.name = 'Bloggs, Joe'
union all -- union if there could be duplicates
select aa.artist
from aliases aa
where aa.name = 'Bloggs, Joe';