组合 SQL 查询,基于计算连接表

Posted

技术标签:

【中文标题】组合 SQL 查询,基于计算连接表【英文标题】:Combine SQL queries, joining tables based on a calculation 【发布时间】:2013-12-04 14:18:18 【问题描述】:

我正在尝试使我的 SQL 更优雅和/或减少我需要运行的查询数量。我有一组两个查询:

    第一个查询影响了我的原始表,更新了一个缩写 记录来自描述记录的信息。 第二个查询 根据 缩写记录。

有没有办法把这些写成一个 查询?

简化查询 1:

UPDATE [tblManipulateD]
SET [tblManipulateD].[abbreviation] = RIGHT([tblManipulateD].[description],3)
WHERE [tblManipulateD].[description] LIKE “*abbrev:*";

简化查询 2

UPDATE [tblManipualteD]
LEFT JOIN [tblStorage] ON ([tblManipulateD].[abbreviation] = [tblStorage].[storage abbreviation]
SET [tblManipualteD].[product code] = [tblStorage].[storage product]
WHERE [tblManipulateD].[description] LIKE “*abbrev:*";

再次,我想知道是否有一种方法(在一个查询中)根据主表的计算将辅助表连接到主表。感谢您的帮助和/或洞察力!

【问题讨论】:

【参考方案1】:

是的,您可以加入描述列的最后 3 个字符:

UPDATE [tblManipulateD]
SET [tblManipulateD].[abbreviation] = RIGHT([tblManipulateD].[description],3), 
    [tblManipualteD].[product code] = [tblStorage].[storage product]
FROM [tblManipulateD] 
LEFT JOIN [tblStorage] ON RIGHT([tblManipulateD].[description],3) = [tblStorage].[storage abbreviation]
WHERE [tblManipulateD].[description] LIKE “*abbrev:*";

【讨论】:

MS Access 不喜欢 UPDATE 查询的语法。在直接尝试了您的语法之后,我尝试将LEFT JOIN 行直接放在UPDATE 行之后,并删除FROM 行,以便它与我已经编写的一些可以工作的查询的语法相匹配。不幸的是,这两种尝试都没有奏效。你还有其他建议吗?也许 MS Access 无法处理这种类型的操作。 天哪……我的问题是一些拼写错误!我能够让您的代码正常工作(加入描述列的最后三个字符),但我确实必须像上面提到的那样重新调整加入短语。非常感谢!

以上是关于组合 SQL 查询,基于计算连接表的主要内容,如果未能解决你的问题,请参考以下文章

学习记录:Leetcode175.组合两张表以及sql四种连接

基于一个共同值在 SQL 中连接两个表

sql语句分组/排序/计算总数/连接等sql语句书写

SQL多表联查总结

知识库-数据库_MySQL之高级数据查询:去重复组合查询连接查询虚拟表

基于最近时间戳连接两个表的 SQL 查询