0

我有以下标签(粗体是PK,斜体是FK)

发明人(inventorid,inventorfirst,inventorlast,patentno

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

InventorID 和Assignee ID 只是用于索引目的的自动编号标识,否则毫无意义。

我试图找到的是某人的名字和姓氏相同但至少有 2 个不同的受让人的情况

到目前为止我所拥有的(我知道的很少)

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

2 回答 2

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


于 2012-07-21T08:08:14.870 回答
0

如果您只想要一份针对他们的发明有多个受让人姓名的发明人列表,请尝试以下操作:

;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

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

于 2012-07-21T10:07:19.347 回答