【问题标题】:Using Inner Join the same result is returned multiple times使用 Inner Join 多次返回相同的结果
【发布时间】:2015-06-20 09:55:27
【问题描述】:

我使用了以下查询:

OrderMaster表:

OrderId
UserId - F.K

Users表:

Id - P.K
Name
Email
Mobilenumber

查询:

SELECT 
    CAST(o.Id as varchar(50)) as ID, 
    CAST(o.Name as varchar(50)) as Name,
    CAST(o.ContactNumber as varchar(50)) as Mobilenumber, 
    o.Email 
FROM 
    ordermaster as t1 
INNER JOIN
    Users as o ON t1.UserId<> o.Id

结果如下所示:

Id  Name   Mobilenumber  Email
-------------------------------------------
1   xxxx   252548878     dfj@dkjf.com
2   yyyy   422557879     dsfsdf@kdjf.com
1   xxxx   252548878     dfj@dkjf.com
2   yyyy   422557879     dsfsdf@kdjf.com

为什么多次返回相同的结果?请澄清一下。

【问题讨论】:

  • 这个连接没有意义Users as o ON t1.UserId&lt;&gt; o.Id
  • 请告诉我们这些列的数据类型是什么!
  • 为什么我想从用户表中获取 Ordermaster 表中没有的数据。不正确吗?
  • 那些列是整数。我希望那些不按顺序的用户我应该接受这个。
  • @Duk,查看我修改后的答案。

标签: sql-server-2008 inner-join


【解决方案1】:

由于您的联接条件是 而不是 =,因此 User 中的每条记录都会与 Ordermaster 中具有不同 id 的所有记录联接,从而多次给出相同的结果。 如果您想获取所有不在 Ordermaster 中的用户,那么您可以这样做:

SELECT ...
FROM Users u
WHERE NOT EXISTS (SELECT * FROM ordermaster WHERE u.Id = Id)

【讨论】:

    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多