常用数据写入另一个表?加入或解析代码?

时间:2013-12-12 09:37:08

标签: sql oracle parsing join

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)。这有可能与查询?

感谢谁试图提供帮助。

2 个答案:

答案 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)

您的数据存在两个问题:

  1. 某些值具有尾随空格
  2. 减号代表"没有数据"
  3. 你可以通过

    解决这个问题
    ON trim(K.EC_NO) = trim(A.ECNO) AND trim(K.EC_NO) != '-' AND trim(A.ECNO) != '-'
    

    说到这里,首先要避免这些有问题的数据当然会更好:

    1. 删除空格:

      UPDATE tablex set ecno = TRIM(ecno)WHERE ecno!= TRIM(ecno);

    2. 删除减号:

      UPDATE tablex set ecno = NULL WHERE TRIM(ecno)=' - ';

    3. 写入插入前/更新触发器以清除插入或更新时的数据。