Mysql 根据一个表中的不同值和另一个表中的不同值查找记录
我有以下选项卡(粗体是PK,斜体是FK) 发明人(发明人ID,发明人第一,发明人最后,专利号) 受让人(受让人ID,受让人姓名,受让人城市,受让人国家专利号) InventorID和受让人ID只是出于索引目的而自动编号的标识,在其他方面毫无意义 我想找到的是,一个人的名字和姓氏相同,但至少有两个不同的受让人 到目前为止我所拥有的(据我所知是非常少的)Mysql 根据一个表中的不同值和另一个表中的不同值查找记录,mysql,sql,sql-server,sql-server-2008,Mysql,Sql,Sql Server,Sql Server 2008,我有以下选项卡(粗体是PK,斜体是FK) 发明人(发明人ID,发明人第一,发明人最后,专利号) 受让人(受让人ID,受让人姓名,受让人城市,受让人国家专利号) InventorID和受让人ID只是出于索引目的而自动编号的标识,在其他方面毫无意义 我想找到的是,一个人的名字和姓氏相同,但至少有两个不同的受让人 到目前为止我所拥有的(据我所知是非常少的) 在这里,我为不同的受让人使用了左外联接。 如果发明人没有任何受让人,则“isnull”函数将输入空白值。 请使用下面的sql查询: 如果您只想要
在这里,我为不同的受让人使用了左外联接。
如果发明人没有任何受让人,则“isnull”函数将输入空白值。
请使用下面的sql查询:
如果您只想要一个发明人列表,该列表中的发明人第一个对其发明有多个AssigneName,请尝试以下操作:
;with inventor_cte(inventorfirst,cnt)
as
(
SELECT
i.inventorfirst
, count(distinct a.assigneename) cnt
FROM
inventors i
inner join assignees a ON
i.patentno=a.patentno
GROUP BY i.inventorfirst
)
select inventorfirst from inventor_cte where cnt>1
上述方法的一种替代方法是使用HAVING
子句:
SELECT i.inventorfirst
FROM
inventors i
inner join assignees a ON
i.patentno=a.patentno
GROUP BY i.inventorfirst
HAVING count(distinct a.assigneename) > 1
我更喜欢第一种语法——不确定哪种更有效 这给了我以下错误:Msg 8120,级别16,状态1,第5行列“inventor.InventorFirst”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。我的代码是通过sql server生成的;对mySql不太确定。我已经对解决方案进行了编辑,因此它现在具有正确的分组,并将在sql Server中工作查询可以工作,但我特别希望结果只显示拥有多个受让人专利的发明人的姓名
;with inventor_cte(inventorfirst,cnt)
as
(
SELECT
i.inventorfirst
, count(distinct a.assigneename) cnt
FROM
inventors i
inner join assignees a ON
i.patentno=a.patentno
GROUP BY i.inventorfirst
)
select inventorfirst from inventor_cte where cnt>1
SELECT i.inventorfirst
FROM
inventors i
inner join assignees a ON
i.patentno=a.patentno
GROUP BY i.inventorfirst
HAVING count(distinct a.assigneename) > 1