【发布时间】:2018-09-14 13:30:51
【问题描述】:
我正在尝试获取一个表中的条形码编号列表,并确定另一个表中存在哪些条形码编号。同样,一组条码数字对应一个盒子,我还需要知道哪些盒子完全匹配并且可以丢弃。不幸的是,条形码编号有时包含无关的非数字字符,因此我在内部连接“ON”语句的两侧都使用了 REPLACE 函数。下面的查询可以很好地确定 table1 中的哪些项目存在于 table2 中。 (DOCINDEX245 是 table2 上的“条形码”列)
SELECT DISTINCT [BAR CODE]
,[Box]
FROM Table1 ft
INNER JOIN Table2 doc
ON REPLACE(REPLACE(ft.[BAR CODE],'M',''),'-WDRN','') = REPLACE(doc.DOCINDEX245,'M','')
where REPLACE(REPLACE(ft.[BAR CODE],'M',''),'-WDRN','') = REPLACE(doc.DOCINDEX245,'M','')
我遇到的问题是,如果我尝试在 Table1 中查找 Table2 中不存在的行。
我试过这个:
SELECT DISTINCT [BAR CODE]
,[Box]
FROM Table1 ft
LEFT JOIN Table2 doc
ON REPLACE(REPLACE(ft.[BAR CODE],'M',''),'-WDRN','') = REPLACE(doc.DOCINDEX245,'M','')
where REPLACE(doc.DOCINDEX245,'M','') is null
但是在我取消之前它运行了 20 分钟没有结果。
注意,Table1 是 10 列 x 60,000 行,Table2 是 300 列 x 140 万行。
在 DOCINDEX245 上有一个索引,我对其进行了重组,但它似乎没有做任何事情,或者无论如何都不够。
这一切都说了,如顶部所述,然后我需要确定哪些框是“完整的”,哪些有一些不匹配的行以及那些是哪些行。
所以我的理想结果应该是这样的:
BARCODE, BOX, MATCH
12345,box1,yes
12346,box1,yes
12347,box1,yes
12348,box2,yes
12349,box2,no
12350,box2,yes
等
我打算尝试使用上述两个查询的结果在 Excel 中手动创建它,但如果有一个查询可以做到这一点,我会全力以赴。
所以我想我在这里有多个问题,所以我愿意接受所有建议。
谢谢
【问题讨论】:
-
你能提供样本数据和想要的结果吗?您所说的“对应”和“完全匹配”并不是很明显。
-
确保你不需要在
where中复制on
标签: sql sql-server sql-server-2008 join