2012-07-21 55 views
0

我有以下脊髓痨(粗体是PK,斜体FK)查找记录基于关在一个表中不同的值和不同的值在另一个表

发明者(inventorid,inventorfirst,inventorlast,专利号

受让人(assigneeID,AssigneeName,AssigneeCity,AssigneeState 专利号

InventorID和受让人我D只是用于索引目的的自动编号标识,否则无意义。

我想找到的情况下,如果有人用相同的名字和姓氏,但至少有2个不同的受让人

我至今(我知道是很小的)

SELECT a.assigneename, i.inventorfirst+' '+ i.inventorlast as Name 
FROM inventors i, assignees a 
WHERE i.patentno=a.patentno 

回答

0

如果你只是想inventorFirst有对他们的发明超过一个assigneeName的名单,然后尝试以下操作:

;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 

我更喜欢第一种语法 - 不确定哪一种更高效。

+0

这给了我下面的错误发明者的名字: 消息8120,级别16,状态1,第5行 列'inventor.InventorFirst'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 – 2012-07-21 16:21:26

+0

我的代码是通过sql-server;不太了解mySql。我编辑了解决方案,现在它有正确的分组,并且可以在sql-server中工作 – whytheq 2012-07-22 09:29:03

0

在这里,我用左外连接为不同的受让人。
如果发明人没有任何受让人,那么'isnull'函数就会产生空白值。
请使用下面的SQL查询:

SELECT 
     isnull(a.assigneename,'') as assigneename 
     , i.inventorfirst+' '+ i.inventorlast as Name 
FROM 
    inventors i 
    left outer join assignees a on 
      i.patentno=a.patentno 


+0

的查询工作,但我想是专门为结果仅显示谁拥有的专利与一个以上的受让人 – 2012-07-21 16:21:56

相关问题