SQL newb here。
我试图使用UNION比较一些文本类型列(认为这是最简单的方法):
SELECT
ResultText
FROM [db1].[dbo].tblTransactions
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
UNION
SELECT
ResultText
FROM [db2].[dbo].tblTransactions
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
然而我收到错误:
数据类型文本不能用作UNION的操作数, INTERSECT或EXCEPT运算符,因为它不具有可比性。
为什么会这样?我使用的是UNION ALL
。我没有收到错误,但这不是我想要的。
为什么不使用文本类型以及如何比较文本列?
感谢您的帮助!
答案 0 :(得分:0)
您可以使用RIGHT JOIN
加入列来比较列,并使用ROW_NUMBER()
为每个查询分配公共字段。
注意:我使用了MS SQL SERVER 2012
SELECT A.ResultText, B.ResultText FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY ResultText) AS row,
ResultText
FROM [db1].[dbo].tblTransactions
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
)AS A
RIGHT JOIN
(
SELECT
ROW_NUMBER() OVER (ORDER BY ResultText) AS row,
ResultText
FROM [db2].[dbo].tblTransactions
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
)AS B
ON A.row=B.row
答案 1 :(得分:0)
假设每个“子查询”仅返回一行。不知道你打算如何使用这些信息。
select
case
when A.ResultText = B.ResultText then 'Same'
else 'Not the same'
end as Comparison
from
(
SELECT cast(ResultText as varchar(max)) as ResultText
FROM db1.dbo.tblTransactions
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
) as A,
(
SELECT cast(ResultText as varchar(max)) as ResultText
FROM db2.dbo.tblTransactions
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
) as B
如果您只想要匹配的值(/对),也可以执行INNER JOIN ON A.ResultText = B.ResultText
。