sql - 在 MS Access 2016 中使用 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 更改为 alarmlogwithstring2 等...)这使得两个查询更加相同,但不应该对结果产生影响。为了确定,我对功能查询做了同样的事情。功能性的仍然有效,而非功能性的仍然不...
2.) 我尝试将查找表的 Tag_Value 字段设为短文本,同时保留实际数据表的 Tag_Value 字段长文本。没有效果。
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(string,length) 函数只会比较每个值中的整数,因为它们都在值的右侧。
如果你的情况和我类似,那么上面的代码就可以了;但是,如果您的错误代码(或其他)数量达到两位数,请务必在两个表的字段中反映这一点。(即 Make Error0 => Error00、Make Error1 => Error01 等)在两个表中并使用 Right(string,2) 而不是 Right(string,1)。[似乎很明显,但可能并不适合所有人。]
但是,对我和其他所有人来说,情况并非总是如此。例如,某人可能有纯文本。因此,同样,如果您知道另一个更通用的解决方案,请告诉我,我会让您的答案成为这个问题的答案。
谢谢!
解决方案
知道了。一般解决方案见下文。它用于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;
推荐阅读
- model-view-controller - 实体框架实现代码优先迁移并防止数据丢失
- python-3.x - Sklearn逻辑回归 - 调整截止点
- swt - 有没有办法禁用 SWT TableColumn 中的复选框
- python - Python重命名错误“找不到文件”错误
- linkedin - 无法为 LinkedIn API 版本 V2 获取公司
- sql - 更高级别聚合的总和
- javascript - '...jQuery is not defined' 使用 webpack 但 jQuery 已定义
- python - 如何覆盖 sys.stdin 以复制输入流
- scala - 通过解析 scala spark 中的表达式以编程方式创建新列
- rest-assured - 如何使用放心获取初始 URL 的 Http 状态码?