我构建了这个联合查询来合并代码字段,以找到在哪个表中找到哪些代码。
SQL=SELECT GOLD.code,1 AS Tbl1,0 AS Tbl2
FROM GOLD LEFT JOIN ADN ON GOLD.code = ADN.code
UNION
SELECT GOLD.code,0 AS Tbl1,1 AS Tbl2
FROM GOLD RIGHT JOIN ADN ON GOLD.code = ADN.code;
结果
Code Tbl1 Tbl2
030?1975*007 0 1
030?1975*008 1 0
030 2259)000 1 0
Y031-1046-002x 1 0
031-1302-000 1 0
031-1303-000 1 0
031-1308-000 1 0
031-71013-RFX 1 0
04-035t:10-002 0 1
04-035t:10-003 1 0
04-035410-000 0 1
04-035410-000 1 0
04-035410-003 0 1
04-035410-003 1 0
047kjlkj**re 1 0
48 1 0
但是我希望在没有重复的情况下更加紧凑,因为我将操作更多的500000条记录。
Code Tbl1 Tbl2
030?1975*007 0 1
030?1975*008 1 0
030 2259)000 1 0
Y031-1046-002x 1 0
031-1302-000 1 0
031-1303-000 1 0
031-1308-000 1 0
031-71013-RFX 1 0
04-035t:10-002 0 1
04-035t:10-003 1 0
04-035410-000 1 1
04-035410-003 1 1
047kjlkj**re 1 0
48 1 0
或类似于将tbl1和tbl2合并到映射字段中的情况。这将是最好的。
Code Mapping
030?1975*007 01
030?1975*008 10
030 2259)000 10
Y031-1046-002x 10
031-1302-000 10
031-1303-000 10
031-1308-000 10
031-71013-RFX 10
04-035t:10-002 01
04-035t:10-003 10
04-035410-000 11
04-035410-003 11
047kjlkj**re 10
48 10
这里有2个表
GOLD
Code
030?1975*008
030 2259)000
Y031-1046-002x
031-1302-000
031-1303-000
031-1308-000
031-71013-RFX
04-035t:10-003
04-035410-000
04-035410-003
047kjlkj**re
和
ADN
Code
030?1975*007
04-035t:10-002
04-035410-000
04-035410-003
答案 0 :(得分:0)
一种方法是将您的查询包装在一个选择中,只从代码获取t1,t2组中的最大值。如果访问支持完整的外连接,这将更容易。
SQL=
SELECT code, max(tbl1) as tbl1, max(tbl2) as tbl2, max(tbl1)&''&Max(tbl2) as stringversion
FROM (
SELECT GOLD.code,1 AS Tbl1,0 AS Tbl2
FROM GOLD
LEFT JOIN ADN
ON GOLD.code = ADN.code
UNION
SELECT GOLD.code,0 AS Tbl1,1 AS Tbl2
FROM GOLD
RIGHT JOIN ADN
ON GOLD.code = ADN.code) A
GROUP BY Code;
如果这是首选输出,那么stringversion应该将最多两列组合在一起。我依靠一些隐式的演员。通过将''字符串添加到看似数字数据类型的字符
这通常是在访问过程中通过基于我们现有的简单聚合数据构建新查询来完成的。