对JOIN
表格自身ON
一个不具有唯一值的列是否存在分析结果?
我见过的大多数自我加入查询都是在PK
列上完成的。我遇到问题让我的数字正确,所以我想知道我做的是否有意义。
E.g。
SELECT *
FROM Employee a
JOIN Employee b
ON a.Birthdate = b.Birthdate
答案 0 :(得分:1)
当您的查询现在被写入时,它将返回所有员工对:
我认为这没有多大意义。您能否提供有关您希望实现的内容以及Employee表结构的更多信息?
如果Birthdate
可以为空,那么您还必须修改ON
子句以加入NULL
值,例如:
SELECT *
FROM Employee a
JOIN Employee b
ON COALESCE(a.Birthdate,'19000101') = COALESCE(b.Birthdate,'19000101')
答案 1 :(得分:0)
SQL INNER JOIN,CROSS JOIN&隐式JOIN(逗号)都导致我们可以将左参数行和右参数行(每个源表别名重命名的列)的每个可能串联称为SQL“交叉产品”。在INNER JOIN的情况下,ON然后删除所有不满足其条件的结果行。 (因此INNER JOIN ON 1 = 1与CROSS和隐式JOIN相同。这也是允许INNER JOIN而不是ON的方言的结果。)无论表中有什么NULL,这都是如此。
见this (dialect-independent) answer explaining INNER/CROSS/implicit JOINs。这也解释了每个 JOIN“有意义”。 (尽管非关系型SQL表(具有NULLS或重复行的表)的SQL含义复杂且模糊不清。)当然,使用错误的查询并不“有意义”。
PS您可能只想要SELECT UNIQUE行。您可能不希望行WHERE a.employee = a.employee
。并且你可能不希望,对于列(a.employee,...,b.employee,...),行(x,...,y,...)和行(y,... 。,x,...),通常的解决方案就像WHERE a. employee <= b.employee
。但是,在编写适当的查询之前,您需要知道输入表和结果表的含义。