【发布时间】:2017-07-26 11:18:46
【问题描述】:
这些是我的 tblEmp 表和 tblDept 表(我使用的是 MS-SQL Server 2012),当我尝试在这两个表上使用交叉联接时,它会给出我是没想到的结果,就是想知道这个cross join为什么会出现这样的结果,谢谢。
ID Name Gender Salary Dept_id
1 abc male 2004 1
2 Tom female 5004 2
3 Sara female 29404 2
4 Jim male 8604 3
5 Lisan male 2078 1
6 Brad male 9804 3
7 Diana female 2095 2
8 Henry male 28204 2
9 Mark male 20821 1
10 Miley female 9456 1
11 Richie male 8604 NULL
12 Lisan female 20776 NULL
tblDept
ID Dept_Name Location
1 IT Mumbai
2 HR Delhi
3 Accounts London
4 OtherDepartment NewYork
这是交叉连接查询,它是输出
select Name, Gender, Salary, Dept_Name
from tblEmp
CROSS JOIN tblDept
where tblEmp.Dept_id is NULL
输出
Name Gender Salary Dept_Name
Richie male 8604 IT
Richie male 8604 HR
Richie male 8604 Accounts
Richie male 8604 OtherDepartment
Lisan female 20776 IT
Lisan female 20776 HR
Lisan female 20776 Accounts
Lisan female 20776 OtherDepartment
我的预期是这样的
Name Gender Salary Dept_Name
Richie male 8604 NULL
Richie male 8604 NULL
Richie male 8604 NULL
Richie male 8604 NULL
Lisan female 20776 NULL
Lisan female 20776 NULL
Lisan female 20776 NULL
Lisan female 20776 NULL
【问题讨论】:
-
跳过 WHERE 子句。你得到了什么?如果重新引入 WHERE 子句,当前结果是否有意义?
-
你的期望是错误的。
cross join与表之间的行不匹配。我猜你只需要考虑这个并尝试其他cross joins,以完全理解为什么结果是正确的。 -
@jarlh 跳过 where 子句会获取非空记录
-
是的,还要将 tblEmp.Dept_id 添加到选择列表中!
-
给你!明白了....谢谢
标签: sql sql-server cross-join