【问题标题】:How can I create a new table based on merging 2 tables without joining certain values?如何在不连接某些值的情况下基于合并 2 个表创建新表?
【发布时间】:2013-08-13 00:56:13
【问题描述】:

我之前问了一个问题,但我真的无法清楚地解释自己。

我制作了一张图表,希望能帮助解释我正在尝试做的事情。

我在同一个数据库中有两个单独的表。一张名为“Consumers”的表格,包含大约 200 个字段,其中一张名为“METER_NUMBERS*”。然后是另一个名为“Customer_Info”的表,其中包含大约 30 个字段,其中一个名为“Meter”。这两个仪表字段是连接或任何方法所基于的。问题是不是两个表中的所有仪表编号都匹配,并且有些是 NULL 值,有些是两个表中的 0 值。

我想加入两个表之间具有匹配米数的记录的信息,但也将 NULL 和 0 值保留为它们自己的记录。两个表中都有 NULL 和 0 值,但我不希望它们连接在一起。

还有一些重复的字段名称,例如图中显示的位置。如果手动修复这些重复的字段名称更容易,我可以这样做,但能够以编程方式完成它会很酷。

关键是我需要一个新表中的结果!

这个过程是一次性的,而不是我经常做的事情。

希望我解释得很清楚,如果有人可以帮助我,那就太好了!

如果需要更多信息,请告诉我。

谢谢。

【问题讨论】:

    标签: sql sql-server syntax


    【解决方案1】:
    INSERT INTO new_table
    SELECT * FROM
    (SELECT a.*, b.* FROM Consumers a
        INNER JOIN CustomerInfo b ON a.METER_NUMBER = b.METER and a.Location = b.Location
        WHERE a.METER_NUMBER IS NOT NULL AND a.METER_NUMBER <> 0
    UNION ALL
         SELECT a.*, NULL as Meter, NULL as CustomerInfo_Location, NULL as Field2, NULL as Field3
         FROM Consumers a
         WHERE a.METER_NUMBER IS NULL OR a.METER_NUMBER = 0
    UNION ALL
         SELECT NULL as METER_NUMBER, NULL as Location, NULL as Field4, NULL as Field5, b.*
         FROM CustomerInfo b
         WHERE b.METER IS NULL OR b.METER = 0) c
    

    【讨论】:

    • 列出指定表中的每个字段,但为 NULL,例如"NULL 作为 METER_NUMBER,NULL 作为位置,..."
    【解决方案2】:

    我知道要从其他表创建一个新表,您可以使用以下代码片段:

    CREATE TABLE New_table
      AS (SELECT customers.Meter_number, customers_info.Meter_number, ...
      FROM customers, customers_info
      WHERE customers.Meter_number = customers_info.Meter_number
      OR customers.Meter_number IS NULL OR customers_info.Meter_number = 0);
    

    我没有测试它,但你应该可以用它做点什么。

    【讨论】:

    • 嗨。看起来 sql 是一个 oracle。
    【解决方案3】:

    我猜你需要的是完全外连接。

    Create table #consumers (
      meter_number int,
      location varchar(50),
      field4 varchar(50),
      field5 varchar(50)
    )
    
    Create table #Customer_info (
      meter int,
      location varchar(50),
      field1 varchar(50),
      field2 varchar(50)
    )
    
    Insert into #consumers(meter_number ,location , field4 , field5 )
    values (1234,'Dallas','a','1')
          ,(null, 'Denver','b','2')
          ,(5678,'Houston','c','3')
          ,(null,'Omaha','d','4')
          ,(0,'Portland','e','5')
          ,(2222,'Sacramento','f','6')
    
    Insert into #Customer_info(meter , location )
    values (1234,'Dallas')
          ,(null, 'Kansas')
          ,(5678,'Houston')
          ,(Null,'Denver')
          ,(0,'Boston')
          ,(4444,'NY')
    
    Select c.*
          ,i.*
    From #consumers c
    full outer join #Customer_info i on c.meter_number=i.meter
                                    and c.location=i.location
    

    【讨论】:

    • 我不确定。如果两个表都包含 NULL, Denver 作为计量器/位置,听起来它们不应该被连接。
    • 你是对的。 sql 基于问题中发布的所需输出。
    【解决方案4】:

    select * into New_Table From (select METER_NUMBER,Consumers.Location AS Location,Field4,Field5,Meter,Customer_Info.Location As Customer_Info_Location,Field2,Field3 From Consumers full external Join Customer_Info on Consumers.METER_NUMBER=Customer_Info.Meter and Consumers。 Location=Customer_Info.Location) AS t

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2022-12-03
      相关资源
      最近更新 更多