根据一个表中的不同值和另一个表中的不同值查找记录

时间:2012-07-21 07:45:35

标签: mysql sql sql-server sql-server-2008

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

发明家( inventorid ,inventorfirst,inventorlast, patentno

受让人( assigneeID ,AssigneeName,AssigneeCity,AssigneeState patentno

InventorID和受让人ID只是用于索引目的的自编号身份,否则无意义。

我想要找到的是具有相同名字和姓名,但至少有2名不同受让人的情况

到目前为止我所拥有的(我知道这是非常小的)

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

2 个答案:

答案 0 :(得分: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


答案 1 :(得分:0)

如果您只想要一个对其发明有一个以上assigneeName的inventorFirst列表,请尝试以下方法:

;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

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