我希望能够从TableA中选择数据,其中Field1大于TableB中的Field2。
在我的脑海中,我想象它是这样的
Select TableA.*
from TableA
Join TableB
On TableA.PK = TableB.FK
WHERE TableA.Field1 > TableB.Field2
我使用的是SQL Server 2005,TableA.Field1和tableB.Field2看起来像:
2004102881010 - data type - Vrachar
我的PK和FK看起来像:
0908232 - data type - nvarchar
问题是当运行此查询时,所有数据都在显示,而不仅仅是Field1更大的行。
干杯:)
答案 0 :(得分:0)
似乎对此演示代码正常工作。也许我不理解问题或数据。
;
with TABLEA (PK, Field1) AS
(
-- Sample row that is filtered out
SELECT CAST('0908232' AS nvarchar(10)), CAST('2004102881010' AS varchar(50))
-- This is bigger than what's in B
UNION ALL SELECT CAST('0908232' AS nvarchar(10)), CAST('2005102881010' AS varchar(50))
)
, TABLEB(FK, Field2) AS
(
-- This matches row 1 above and will be excluded
SELECT CAST('0908232' AS nvarchar(10)), CAST('2004102881010' AS varchar(50))
)
SELECT TableA.*
FROM TableA
INNER JOIN TableB
ON TableA.PK = TableB.FK
WHERE TableA.Field1 > TableB.Field2
结果
PK Field1
0908232 2005102881010
答案 1 :(得分:0)
这似乎是缺少零的问题: 20041028 * 0 * 81010
您的查询没有问题,但是您的数据。 考虑2001-01-01 01:01:01,这将被视为:200111111 它应该被视为:20010101010101
答案 2 :(得分:0)
字符串(varchar,nvarchar等)上使用的比较运算符(>,<)按字母顺序工作。例如,'9'> '11'是真的。您可以尝试进行数据类型转换...
WHERE cast(A.field1 as int) > cast(B.field2 as int)