Sql server 当主键和外键在另一个表中同时存在时,如何查询数据?

Sql server 当主键和外键在另一个表中同时存在时,如何查询数据?,sql-server,join,distinct,Sql Server,Join,Distinct,我试图查询数据,但它显示了相同的记录两次如何区分 表1:UserBasics user_Id , user_Fullname , user_Zip , user_Need -------------------------------------------------------------------- 10 Alberto Cesaro 98001 Sales, Marketing & Public Relations 表2:UserProfession

我试图查询数据,但它显示了相同的记录两次如何区分

表1:
UserBasics

user_Id , user_Fullname , user_Zip , user_Need
--------------------------------------------------------------------
10    Alberto Cesaro    98001    Sales, Marketing & Public Relations    
表2:
UserProfession

Prof_ID , Company , Designation
----------------------------------
10    Young's   Marketing Manager
10    Young's   Regional Manager
我的程序:

CREATE PROC P @Zip         VARCHAR(20)=NULL,
              @Company     VARCHAR(200)=NULL,
              @Designation VARCHAR(100)=NULL,
              @Interest    VARCHAR(200)=NULL,
              @CurrentID   VARCHAR(200)=NULL
--@JobFunc varchar(200)=NULL
AS
  BEGIN
      -- SET NOCOUNT ON added to prevent extra result sets from
      -- interfering with SELECT statements.
      SET NOCOUNT ON;

      SELECT ub.user_Id,
             ub.user_Fullname,
             up.Designation,
             up.Company
      FROM   UserBasics UB
             INNER JOIN UserProfession up
               ON ub.user_Id = up.Prof_ID
      WHERE  ( @Zip IS NULL
                OR ub.user_Zip LIKE '%' + @Zip + '%' )
             AND ( @Interest IS NULL
                    OR ub.user_Need LIKE '%' + @Interest + '%' )
             AND ( @Company IS NULL
                    OR up.Company LIKE '%' + @Company + '%' )
             AND ( ub.user_Id != @CurrentID )
             AND ( @Designation IS NULL
                    OR up.Designation LIKE '%' + @Designation + '%' )
  END 
如上所述,使用存储过程只是为了清除条件和变量

如何向每个用户显示对您的建议的不同期望

谢谢

编辑:

输出应该是相似的

10  Alberto Cesaro          Marketing Manager,Regional Manager  Young's
第二次编辑:

我已经用过公司名称了,但如果我想在用户专业表列上使用过滤器,那么我会如何关联它??我的问题是

    SELECT
     user_Id, user_Fullname,
     STUFF(
         (SELECT ', ' + Designation 
          FROM   UserProfession as up
          WHERE  Prof_ID = a.user_Id
          FOR XML PATH (''))
          , 1, 1, '') Designation,
      STUFF(
         (SELECT ', ' + Company 
          FROM   UserProfession
          WHERE  Prof_ID = a.user_Id
          FOR XML PATH (''))
          , 1, 1, '')  AS Company
FROM UserBasics AS a
where  (@Zip is null or a.user_Zip like '%'+@Zip+'%') and
    (@Interest is null or a.user_Need like '%'+@Interest+'%') and
    --  (@JobFunc is null or m.mentor_jobFunction= @JobFunc) and
    (@Company is null or up.Company like '%'+@Company+'%') and
    (a.user_Id != @CurrentID) and
    (@Designation is null or up.Designation like '%'+@Designation+'%')
--where   a.user_Zip like '%90005%'
-- WHERE clause here
GROUP BY user_Id, user_Fullname
--因为我在公司和名称上有错误,所以条款希望最后的建议是什么

SELECT
     user_Id, user_Fullname,
     STUFF(
         (SELECT ', ' + Designation
          FROM   UserProfession
          WHERE  Prof_ID = a.user_Id
          FOR XML PATH (''))
          , 1, 1, '')  AS DesignationList
FROM UserBasics AS a
-- WHERE clause here
GROUP BY user_Id, user_Fullname

Alberto Cesaro出现两次,因为他的
UserProfession
表中有两行。你想展示什么?展示的是“阿尔贝托·塞萨罗”数据一次你想要的结果是什么样子的?@JW我已经编辑了我的帖子并显示了输出结果可能的重复如果有其他用户可能有更多的指定,那么这个代码也会工作吗?我自己尝试过并获得了成功,但有一个问题我在上面的第二版中提到谢谢你的建议,但我是这样做的问题是,当我必须在where条款中使用公司名称和指定名称时?正如我在第二版中提到的,我明白了,你不能使用这些字段,因为它们没有投射到内部查询上,或者你也可以这样做,