【问题标题】:Inner Join two tables when one column is a text and the other is number当一列是文本,另一列是数字时,内部连接两个表
【发布时间】:2011-01-09 16:45:45
【问题描述】:

我有一个正在访问的程序正在使用一些链接的 ODBC 表。我最初有一个包含以下 INNER JOIN 的查询:

FROM Neptune_FN_Analysis 
INNER JOIN Neptune_prem ON Neptune_FN_Analysis.PremID = Neptune_prem.premice_id 

这工作得很好,直到列 Neptune_prem.premice_id 从数字更改为文本数据类型。所以现在我需要一种在两列上使用 INNER JOIN 的方法,其中一列是数字,另一列是文本。

请记住,我不能简单地更改链接的 ODBC 表正在查看的表中的数据类型。

如果这是不可能的或代码量过大,我的另一个逻辑选择是进行查询以创建一个本地表,我可以使用 Neptune_FN_Analysis 表中的所有相同数据以及该查询编辑后的代码中的所有相同数据进行编辑我要加入的列以输入文本。如果合理的话,我宁愿只修改这个 SQL 查询。

【问题讨论】:

  • 我在这里看到的问题是,即使你让它工作,这些值很可能在某些时候不会匹配,因为数据类型可能已更改为文本数据以接受它数据类型。
  • 大声笑,我希望我能在 Access 以外的其他地方制作这个工具,但我在这件事上没有发言权,我只是继承了它。
  • 停止访问访问。虽然许多人在使用 Jet/ACE 数据库引擎创建可靠的应用程序时遇到了很多麻烦(因为他们没有费心去了解它是如何工作的以及如何正确使用它),但作为 RAD 开发的 Access 并没有任何问题用于数据库应用程序前端的工具。像这样的评论只会让你看起来像个孩子。
  • @David- 正确,Access 非常有用,并且在许多应用程序中运行良好。对于多用户环境,以及他们希望此应用程序执行的某些操作,对于他们想要的内容,有比 MS Access 更好的选择。
  • 取决于用户群 在多用户环境中访问可能会很好。当然,前端开发工具 Access 和 Access 的默认数据库引擎 Jet/ACE 之间存在着关键的区别。后者将在前者之前很久就失去动力。

标签: sql vba ms-access join


【解决方案1】:

首先,我会追查是谁进行了更改并找出原因。您可能会遇到更大的问题,而不仅仅是让数字匹配。这些更改不是无缘无故进行的,如果它们从数字字段更改为文本字段,可能是因为他们需要将文本数据放入字段中,现在如果您继续进行,您将根本无法比较使用数字。数据库更改需要考虑其他可能受到的影响,而这次显然没有。作为第一步,找出是谁做的以及为什么做。

【讨论】:

  • 是的,我什至在我在这里发布我的问题之前就这样做了。这样做不是因为需要将文本数据放入列中。这样做是因为他们从中导入数据的源不要求该列是任何类型的数字字段,因此他们将其作为文本。因此,为了确保导入数据没有任何问题,我们的字段也更改为文本。该列中的值始终应该是数字或空白。我希望其他公司的要求会有所改变,但我对此事没有发言权。
  • 真是一群疯狂的白痴。通常的程序是使用缓冲表来处理不合格数据的数据,并在它到达数据库之前对其进行处理。
  • 我和大卫一起做这个。通过创建一个大问题来解决一个小问题似乎是一种糟糕的妥协。
【解决方案2】:

您是否尝试过使用CAST('abc' AS varchar(5)) varchar 中的数字列?

已编辑

您应该使用clng 将文本转换为数字...

【讨论】:

  • 我本来想说这样的话,但他说他把它改成了text,你应该无法比较。
  • Access/Jet/ACE 哪个版本添加了 CAST() 函数? (免费线索——发布前阅读标签)。
【解决方案3】:

如果您是在谈论将“500”变成 500,请查看ValCDblCIntCCurCDec 和其他转换函数:

FROM Neptune_FN_Analysis 
INNER JOIN Neptune_prem ON Neptune_FN_Analysis.PremID = CInt(Neptune_prem.premice_id)

【讨论】:

  • Val 似乎目前正在工作,而 CInt 却没有,因为显然其中一个数字太大了。无论如何,谢谢。
  • Val() 在您需要处理所有数字类型时总是首选。
猜你喜欢
  • 1970-01-01
  • 2018-06-09
  • 2014-06-02
  • 2020-02-09
  • 2012-06-10
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2012-10-08
相关资源
最近更新 更多