【发布时间】:2021-08-22 18:44:33
【问题描述】:
我有一个关于我在 Microsoft Access 中编写的 SQL 查询的问题。我有两个表,其中包含我尝试加入的主键版本。
第一个表 (Table1) 包含以下格式的 PK #:TORD46709NVSW。最后四个字符可以是 3-4 个字母,并且有多种组合。
第二个表(表 2)包含以下格式的 PK #:TORD00046709。 TORD后面总是三个零(这4个字符总是一致的)。
我已编写查询以将这两个格式转换为以下格式:TORD46709。
表 1:
SELECT
LEFT ([PKT_NUMBER_SFX], 9) AS
TORD_NUMBER
FROM Table_1;
表 2:
SELECT
LEFT ([Transfer ID], 4) +
RIGHT ([Transfer ID], 5)
AS
TORD_NUMBER
FROM Table_2;
我的问题是我现在正在尝试加入这两个表,但我很挣扎。我试图在子查询中编写上述语句以便加入,但现在我想我可能需要在加入之前进行更新表查询。我想避免后者。
SELECT QlikView_Report.PKT_NUMBER_SFX, Transfer_Orders_OLD.[Transfer ID]
FROM QlikView_Report
LEFT JOIN TORD_REPORT ON QlikView_Report.PKT_NUMBER_SFX = Transfer_Orders_OLD.[Transfer ID]
WHERE Transfer ID IN
(SELECT
LEFT ([Transfer ID], 4) +
RIGHT ([Transfer ID], 5)
AS
TORD_NUMBER
FROM Transfer_Orders_OLD) AND
(SELECT
LEFT ([PKT_NUMBER_SFX], 9) AS
TORD_NUMBER
FROM QlikView_Report);
如果您认为可以加入这些不匹配的 PK,请告诉我。
【问题讨论】:
-
如果这是你经常做的事情,或者如果 table1 非常大,你应该考虑将 table2 键放入 table1 表中,它可以利用索引。在计算键上连接两个表效率低下,大型查询可能会变得非常慢。但是,如果它只是一次性的并且您的表少于几十万行,那么请不要打扰。
-
表 1 大约有 75-80k 行,随着时间的推移而变化。我没有看到它增长到超过几十万行,所以它仍然会运行得相当快吗?