Hello Guys我需要一个查询“将所有与(table1.column1)= table2.column2匹配的数据写入另一个单词中的table3”;
我有两个表,一个列都是常见的,我想选择这些列中数据相同的所有行,并将它们写入另一个表。
这是我的表格似乎;
(这些列数据类型为table1:varchar2(500char)
table2:varchar2(50byte)
表1
ecno
213-408-0
204-114-3
223-874-7
213-447-3
...
表2
ecno
244-472-8
213-408-0
223-134-7
213-447-4
...
当我执行此查询时(我使用oracle 11g):
select k.ecno from kimyasal k JOIN A_REFLIST a ON K.EC_NO=A.ECNO
没有行返回。但我知道这些专栏中有数百个常用数据 我的问题是:
与...无关的原因是什么?“列数据类型大小不同?”或者类似的东西?
我怎么能做得好?我应该尝试什么类型的查询?或者我听说需要解析数据,是否有必要?
当公共行返回时,我需要写回所有返回的行 另一张桌子(表3)。这有可能与查询?
感谢谁试图提供帮助。
答案 0 :(得分:0)
你的内部联接应该有效,另一个解决方案是使用 Exists 子句,但我不认为它对你的情况有用。您也可以将您的值转换为Varchar2(500),以确保您比较相同的类型。
INSERT INTO Table3(name_of_your_column)
SELECT k.EC_NO
FROM kimyasal k
WHERE EXISTS
(SELECT 1 FROM A_REFLIST a WHERE CAST(a.ECNO as VARCHAR2(500)) = k.EC_NO)
答案 1 :(得分:0)
您的数据存在两个问题:
你可以通过
解决这个问题ON trim(K.EC_NO) = trim(A.ECNO) AND trim(K.EC_NO) != '-' AND trim(A.ECNO) != '-'
说到这里,首先要避免这些有问题的数据当然会更好:
删除空格:
UPDATE tablex set ecno = TRIM(ecno)WHERE ecno!= TRIM(ecno);
删除减号:
UPDATE tablex set ecno = NULL WHERE TRIM(ecno)=' - ';
写入插入前/更新触发器以清除插入或更新时的数据。