【问题标题】:Need some help on writing SQL query在编写 SQL 查询时需要一些帮助
【发布时间】:2014-03-28 18:47:25
【问题描述】:

希望你做得很好。我是 SQL 编码的新手。我想编写一个查询来查找两个表之间的差异并将更新或新数据写入第三个表。我的两个表具有相同的列名。捕获更改的第三个表有额外的列,称为注释。我想根据行修改插入注释,无论是新行还是更新行。

**TABLE1 (BACKUP)**
KEY,FIRST_NAME,LAST_NAME,CITY
1,RAM,KUMAR,INDIA
2,TOM,MOODY,ENGLAND
3,MOHAMMAD,HAFEEZ,PAKISTAN
4,MONIKA,SAM,USA
5,MIKE,PALEDINO,USA

**TABLE2 (CURRENT)**
KEY,FIRST_NAME,LAST_NAME,CITY
1,RAM,KUMAR,USA
2,TOM,MOODY,ENGLAND
3,MOHAMMAD,HAFEEZ,PAKISTAN
4,MONIKA,SAM,INDIA
5,MIKE,PALEDINO,USA
6,MAHELA,JAYA,SL



**TABLE3 (DIFFERENCE FROM TABLE2 TO TABLE1)**
KEY,FIRST_NAME,LAST_NAME,CITY,COMMENT
1,RAM,KUMAR,USA,UPDATE
4,MONIKA,SAM,INDIA,UPDATE
6,MAHELA,JAYA,SL,INSERT

还有其他人吗?我想更新我的 cmets 列,无论是新插入还是更新现有行

【问题讨论】:

    标签: oracle11g


    【解决方案1】:

    @danny117 在一般意义上是正确的,尽管我认为使用 MINUS 更好

    SELECT * FROM TABLE2 
    MINUS
    SELECT * FROM TABLE1
    

    您可能还想查看this documentation,它解释了关于减号、相交的更多信息

    【讨论】:

    • 是的,但是如何在使用 Table2 时将表 1 到表 3 写入评论列?我想捕获它是否是新行的更新。
    • 假设 Comment 存在于另一个表中,我们将其称为 table4,您可以执行 (SELECT * FROM TABLE2 MINUS SELECT * FROM TABLE1) LEFT OUTER JOIN TABLE4 ON TABLE2.KEY = TABLE4.KEY
    • 不,第四张桌子上不存在。我正在从两个表之间的差异中弥补,无论是新行插入还是更新到现有行。
    • 我认为您需要查看'case'。我想像 SELECT *, CASE WHEN minusTable.CITY != TABLE2.CITY THEN 'UPDATE' ELSE 'INSERT' END FROM (SELECT * FROM TABLE2 MINUS SELECT * FROM TABLE1) AS minusTable; 这样的东西。我没有测试过,但我希望你能明白这个原理。
    • 更正SELECT *, CASE WHEN minusTable.CITY != TABLE1.CITY THEN 'UPDATE' ELSE 'INSERT' END FROM (SELECT * FROM TABLE2 MINUS SELECT * FROM TABLE1) AS minusTable;让我知道它是否有效
    【解决方案2】:
    INSERT INTO TABLE3
    SELECT KEY,FIRST_NAME,LAST_NAME,CITY,NULL AS COMMENTS FROM TABLE2
    MINUS 
    SELECT KEY,FIRST_NAME,LAST_NAME,CITY,NULL AS COMMENTS FROM TABLE1;
    
    
    UPDATE TABLE3 
    SET COMMENTS =
    CASE 
    WHEN 1=(SELECT 1 FROM TABLE1 WHERE TABLE1.KEY=TABLE3.KEY) THEN 'UPDATED'
    ELSE 'INSERTED'
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-14
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      相关资源
      最近更新 更多