我有两个几乎相同的查询。唯一的区别是要加入的字段的格式。一个有效,另一个没有。
JOIN两个整数字段的查询工作正常。
JOIN两个长文本字段的查询会产生以下错误: “无法加入备注,OLE或超链接对象(alarmlogwithstring2。[Tag_Value] = ECLString。[Tag_Value])。”
功能查询:
SELECT alarmlogwithdescs.TableIndex, alarmlogwithdescs.Date_Stamp, alarmlogwithdescs.Time_Stamp, alarmlogwithdescs.Tag_Name, alarmlogwithdescs.Tag_Value, ErrorCodeLookup.ErrorDescription
FROM ErrorCodeLookup INNER JOIN alarmlogwithdescs ON ErrorCodeLookup.[Tag_Value] = alarmlogwithdescs.[Tag_Value]
ORDER BY alarmlogwithdescs.TableIndex;
非功能性查询:
SELECT alarmlogwithstring2.TableIndex, alarmlogwithstring2.Date_Stamp, alarmlogwithstring2.Time_Stamp, alarmlogwithstring2.Tag_Value, ECLString.ErrorDescription
FROM alarmlogwithstring2 INNER JOIN ECLString ON alarmlogwithstring2.[Tag_Value] = ECLString.[Tag_Value]
ORDER BY alarmlogwithstring2.TableIndex;
我尝试过的事情:
1。)我将“FROM”之后的表交换为ECLString,并且应该遵循所有必要的更改。 (即,在INNER JOIN之后,我将ECLString更改为astmlogwithstring2等...)这使得两个查询更加相同,但不应对结果产生影响。我确实为功能查询做了同样的事情。功能性的仍然有效,非功能性的仍然没有......
2.。)我尝试使用查找表的Tag_Value字段短文本,同时保留实际数据表的Tag_Value字段Long Text。没效果。
3.)我在创建两个表之间的关系时尝试更改JOIN类型。没效果。
4.。)已更改alarmlogwithstring2.[Tag_Value]=ECLString.[Tag_Value]
到CAST(alarmlogwithstring2.[Tag_Value] AS varchar(max)) = CAST(ECLString.[Tag_Value] AS varchar(max))
并收到以下错误:
“查询表达式中的语法错误(缺少运算符)CAST(alarmlogwithstring2。[Tag_Value] AS varchar(max))= CAST(ECLString。[Tag_Value] AS varchar(max))。”
无论出于何种原因,点击“确定”关闭错误消息后,SELECT alarmlogwithstring2.TableIndex,
后面的逗号突出显示,表明缺少的操作符在那里。好吗?
非常感谢任何帮助。谢谢你的时间!
知道了!至少对我的情况有用。任何其他方法仍然可以理解。
这对我有用,因为我的Tag_Value字段包含诸如“Error0,Error1,Error2”等文本......
所以,我使用了以下代码:
SELECT alarmlogwithstring2.TableIndex, alarmlogwithstring2.Date_Stamp, alarmlogwithstring2.Time_Stamp, alarmlogwithstring2.Tag_Value, ECLString.ErrorDescription
FROM alarmlogwithstring2 INNER JOIN ECLString ON Right( alarmlogwithstring2.[Tag_Value] , 1) = Right(ECLString.[Tag_Value], 1)
ORDER BY alarmlogwithstring2.TableIndex;
这是因为我的Tag_Value文本末尾的整数。使用Right(字符串,长度)函数只会比较每个值中的整数,因为它们都在值的右侧。
如果您的情况与我的相似,那么上面的代码就可以了;但是,如果您的错误代码(或其他)数量达到两位数,请务必在两个表的字段中反映出来。 (即Make Error0 => Error00,make Error1 => Error01等...)并在两个表中使用Right(字符串,2)而不是Right(字符串,1)。 [似乎很明显,但可能不适合所有人。]
但是,对于我和其他所有人来说,情况并非总是如此。例如,某人可能有纯文本。因此,再次,如果你知道另一个更通用的解决方案,请告诉我,我会回答这个问题的答案。
谢谢!
答案 0 :(得分:0)
知道了。请参阅下面的一般解决方案它使用StrComp(string1,string2)=0
来匹配字符串。
SELECT alarmlogwithstring2.TableIndex, alarmlogwithstring2.Date_Stamp, alarmlogwithstring2.Time_Stamp, alarmlogwithstring2.Tag_Name, alarmlogwithstring2.Tag_Value, ECLString.ErrorDescription
FROM alarmlogwithstring2 INNER JOIN ECLString ON StrComp(alarmlogwithstring2.[Tag_Value], ECLString.[Tag_Value]) = 0
ORDER BY alarmlogwithstring2.TableIndex;