我正在为我的大学论文收集研究数据。不幸的是,我不是计算机科学或编程专家,也没有任何SQL经验。
对于我的论文,我需要做一个SQL查询来回答这个问题:“给我一个公司X的所有专利,其中在特定的时间跨度内有多个申请人(其他公司)”。我想要提取的数据存储在一个名为PATSTAT的数据库中(我有一个月的试用期)并且正在使用 - 不要惊讶于SQL。
我尝试了很多查询,但总是遇到不同的语法错误。
这是界面的样子: http://www10.pic-upload.de/07.07.13/7u5bqf7jsow.png
我认为我非常了解需要做什么(也来自SQL POV),但我无法执行它。
我的想法:结果我想要公司的名称(参考下面输入的公司)
SELECT person_name from tls206_person table
现在因为我需要像
这样的标准WHERE nb_applicants > 1 from tls201_appln table
我需要加入这两个表tls206和tls201。我确实阅读了一些关于SQL的简要介绍指南(由欧洲专利局提供),因为两个表都没有共同的“参考密钥”,我们需要使用表tls207_pers_appln als“intermediate”来说。现在这就是我陷入困境的地步。我尝试了以下但是这不起作用
SELECT person_name, tls201_appln.nb_applicants
FROM tls206_person
INNER JOIN tls207_pers_appln ON tls206_person.person_id= tls207_pers_appln.person_id
INNER JOIN tls207_pers_appln ON tls201_appln.appln_id=tls201_appln.appln_id
WHERE person_name = "%Samsung%"
AND tls201_appln.nb_applicants > 1
AND tls201_appln.ipr_type = "PI"
我收到以下错误:“0:37:11 [SELECT - 0 row(s),0 secs] [错误代码:1064,SQL状态:0]不唯一的表/别名:'tls207_pers_appln'”
我认为只用了4个小时SQL我的方法并不差,但我真的需要一些指导如何继续,因为我没有取得任何进展。
理想情况下,我想计算(对于每家公司)和每一行分别找到多少“nb_applicants”。
如果您需要进一步的信息以便给我指导,请告诉我。
期待您的回答。
祝你好运 Kendels
答案 0 :(得分:0)
您正在引用表tls201_appln
,但它不在from
子句中。我猜测tls207_pers_appln
的第二个引用应该是另一个表:
SELECT person_name, tls201_appln.nb_applicants
FROM tls206_person
INNER JOIN tls207_pers_appln ON tls206_person.person_id = tls207_pers_appln.person_id
INNER JOIN tls201_appln ON tls201_appln.appln_id = tls207_pers_appln.appln_id
WHERE person_name like '%Samsung%"'
AND tls201_appln.nb_applicants > 1
AND tls201_appln.ipr_type = "PI"
答案 1 :(得分:0)
另一种做同样事情的方法,你可能会发现它更容易理解(如果你是sql的新手,那么你到目前为止这是令人印象深刻的),是:
SELECT tls206_person.person_name, tls201_appln.nb_applicants
FROM tls206_person, tls207_pers_appln, tls201_appln
WHERE tls206_person.person_id = tls207_pers_appln.person_id
AND tls201_appln.appln_id = tls201_appln.appln_id
AND tls206_person.person_name LIKE "%Samsung%"
AND tls201_appln.nb_applicants > 1
AND tls201_appln.ipr_type = "PI"
(它等同于另一个答案,但不是试图理解JOIN
语法,而是写出所有逻辑,而SQL足够聪明以使其工作 - 这通常被称为“新”或者“ISO”内连接语法,如果你想谷歌获取更多信息)(尽管有可能,我想,你正在使用的数据库不支持这种新语法。)
答案 2 :(得分:0)
对于我的论文,我需要做一个SQL查询来回答这个问题:“给我一个公司X的所有专利,其中在特定的时间跨度内有多个申请人(其他公司)”。
让我为你重新说一下:
SELECT * FROM patents p -- : "Give me all patents
WHERE p.company = 'X' -- of a company X
AND EXISTS ( -- where there is
SELECT *
FROM applicants x1
WHERE x1.patent_id = p.patent_id
AND x1.company <> 'X' -- another company:: exclude ourselves
AND x1.application_date >= $begin_date -- in a specific time span
AND x1.application_date < $end_date
-- more than one applicant (other company)
-- To avoid aggregation: Just repeat the same subquery
AND EXISTS ( -- where there is
SELECT *
FROM applicants x2
WHERE x2.patent_id = p.patent_id
AND x2.company <> 'X' -- another company:: exclude ourselves
AND x2.company <> x1.company -- :: exclude other other company, too
AND x2.application_date >= $begin_date -- in a specific time span
AND x2.application_date < $end_date
)
)
;
[注意:由于OP没有提供任何表格定义,我不得不发明这些]
这不是完美的查询,但它确实表达了您的意图。给定合理的键/索引,它也会合理地执行。