情景就是这样。我们有一个包含所有逻辑客户信息的客户表,以及一个我们称之为“事件”的不同表。在事件表中,除了别的以外,还有客户端的名字,姓氏和ssn。
在customer表中,ssn是一个varchar(9),仅用于数字,但是事件表的ssn是varchar(11),用于数字加短划线。事情是一些客户可能是人或实体,而ssn用于区分这样的:
人们的ssn格式为123-45-6789,而实体的格式为12-3456789。
所以我想要做的是运行一个查询,该查询在名字和姓氏上连接Customer和Event表,以便我可以检查Event表格中SSN格式的差异。
我是一个相对较新的开发人员,所以我从来没有遇到过这种情况,也不知道是否有可能。这是我当前查询的样子:
SELECT top 10 c.firstname, c.lastname, c.ssn, e.ssn, e.firstname, e.lastname
FROM customer c with(nolock)
LEFT OUTER JOIN [event] e with(nolock) on
c.firstname = e.firstname and
c.lastname = e.lastname
答案 0 :(得分:2)
是的,您可以在ON子句条件中使用本机或用户定义的任何函数方式使用多个字段。它就像你在WHERE子句中使用的那样,但位于一个稍微不同的地方。例子:
FROM TABLE_A a
JOIN TABLE_B b ON b.col1 || ' ' || b.col2 = a.col
...或:
FROM TABLE_A a
JOIN TABLE_B b ON ABS(b.col) = a.col
WHERE
或ON
子句,使用INNER连接无关紧要。但是如果使用OUTER连接很重要,因为ON条件在JOIN之前/期间应用,而WHERE在之后发生 - 这可以彻底改变结果集。
答案 1 :(得分:0)
SELECT top 10 c.firstname, c.lastname, c.ssn, e.ssn, e.firstname, e.lastname
FROM customer c with(nolock)
JOIN [event] e with(nolock) on
c.firstname = e.firstname and
c.lastname = e.lastname
此查询有效,与原始查询相同,但左外部给出了偏差结果。