【问题标题】:INNER JOIN works as CROSS JOININNER JOIN 相当于 CROSS JOIN
【发布时间】:2014-06-23 08:56:56
【问题描述】:

我有一个非常简单的场景

ID |NAME | DEPT_ID
1  |R K  | 1
2  |V K  | 1

DEPT_ID | LOC
1       | KA 
1       | VA

预期输出

 ID |NAME | DEPT_ID |LOC
 1  |R K  | 1       |KA
 2  |V K  | 1       |VA

但是,得到

ID |NAME | DEPT_ID |LOC
1  |R K  | 1       |KA
2  |V K  | 1       |VA
1  |R K  | 1       |VA
2  |V K  | 1       |KA

我使用了简单的 INNER JOIN。我能得到预期的输出吗?

select ID,NAME,LOC 
from table1 
    inner join table2 on table1.dept_id=table2.dept_id

【问题讨论】:

  • 你试过的查询在哪里?
  • 真正的查询真的很大..所以我不能在这里写,但它是表之间的简单内连接
  • 所以这里的人应该猜到查询了吗??
  • 你还没有问过问题。您希望我们为您提供什么?
  • 所以在您的第二张表中,您有一个包含两个位置的部门 ID。您怎么知道哪个位置与哪个名称对应?你少了一把钥匙。

标签: sql sql-server join inner-join


【解决方案1】:

第一条记录的 dept_id 为 1。此 dept_id 有 2 条匹配记录

第二条记录的 dept_id 为 1。此 dept_id 有 2 条匹配记录

所以结果中总共有 4 条记录。它按预期工作。

服务器不可能知道KA 匹配R K 而不是V K

结论:不要使用非唯一字段进行连接。

【讨论】:

  • 你能举个例子吗?
  • 没有例子可以给出。如果您通过 dept_id 加入这 2 个表,您将始终为您的每个 ID 获得 2 行。那是因为 DEPT 表有非唯一的 dept_id
猜你喜欢
  • 1970-01-01
  • 2013-07-19
  • 2020-06-15
  • 2019-02-18
  • 2019-09-03
  • 1970-01-01
  • 2011-08-10
  • 2014-08-19
  • 1970-01-01
相关资源
最近更新 更多