我想通过描述将两个包含产品的表放在一起
TABLE 1: [..fields..] [DESCRIPTION1] [..fields..]
TABLE 2: [..fields..] [DESCRIPTION2] [..fields..]
SELECT [..fields..] FROM TABLE1,TABLE2
INNER JOIN TABLE1
ON TABLE1.DESCRIPTION1 = TABLE2.DESCRIPTION2
但是在很多情况下,两个表中都有以空格结尾的描述,我也想得到它们,为什么我这样做:
SELECT [..fields..] FROM TABLE1,TABLE2
INNER JOIN TABLE1
ON TABLE1.DESCRIPTION1 = TABLE2.DESCRIPTION2
OR RTRIM(TABLE1.DESCRIPTION1) = RTRIM(TABLE2.DESCRIPTION2)
这不会产生任何错误,但不会带来更多数据。
有人能帮助我吗?
感谢每一位帮助:)
先谢谢你,哈利
答案 0 :(得分:4)
问题可能是描述末尾的CRLF字符,它看起来像SSMS中的空格,不会被RTRIM()
删除。
要查看,请查看选择where Description like '%' + char(13) + char(10)
是否返回任何内容。如果说明的末尾只有1个空格,请单独尝试char(13)
或char(10)
。最后,一个标签(char(9)
)看起来也像一个空格,所以你也可以试试。
如果它确实是任何这些字符,您可以使用REPLACE
来摆脱它们:
REPLACE(REPLACE(REPLACE(MyField, CHAR(10), ''), CHAR(13), ''), CHAR(9), '')
我找到了here。
答案 1 :(得分:1)
您不需要OR
SELECT [..fields..]
FROM TABLE1 T1
INNER JOIN TABLE2 T2
ON RTRIM(T1.DESCRIPTION1) = RTRIM(T2.DESCRIPTION2)
答案 2 :(得分:1)
根据数据类型,您根本不需要RTRIM()。我也想知道你的旧式和现代连接语法的混合是否会使你绊倒(尽管这应该会产生更多行,而不是更少)。这会产生什么结果?
SELECT [..columns..]
FROM dbo.TABLE1 AS t1
INNER JOIN dbo.TABLE2 AS t2
ON RTRIM(t1.DESCRIPTION1) = RTRIM(t2.DESCRIPTION2);