簡體   English   中英

根據不同和非不同的列將一個表拆分為兩個相關的表

[英]Split a table into two related tables based on distinct and non distinct columns

我有一個包含不同列和非不同列的表,我想將其分解為相關表。

為簡單起見,我們假設下表:

original
    id | product | vendor  |  attr
    ----------------------------------
    1    phone     ebay      some attr a
    2    t.v       amazon    some attr b
    3    phone     paypal    some attr c
    4    t.v       google    some attr d

並假設我想像這樣創建兩個相關的表:

table_a
id | product 
--------------
1    phone 
2    t.v    

table_b
id | table_a_ref | vendor | attr
----------------------------------
1      1           ebay     attr a
2      1           paypal   attr c
3      2           amazon   attr b
4      2           google   attr d

我無法將 table_a 中正確的新 ID 與表 b 中的引用字段匹配。

例如使用不同的:

WITH products AS (
    INSERT INTO table_a (product)
    SELECT DISTINCT product
    FROM original 
    RETURNING id
  )
INSERT INTO table_b (table_a_ref, vendor, attr)
-- How do I refer to the right reference id and correlate it to table_A?

由於您的 CTE 已經返回了您需要的信息,我相信您可以在不引用table_a情況下做到這一點。 但是,如果您無論如何都需要表格中的這些信息,您可能想試試這個:

樣本數據:

CREATE TABLE original (id INT, product TEXT, vendor TEXT, attr TEXT);
CREATE TABLE table_a (id SERIAL, product TEXT);
CREATE TABLE table_b (id INT, table_a_ref INT, vendor TEXT, attr TEXT);

INSERT INTO original VALUES
(1,'phone','ebay','some attr a'),
(2,'t.v','amazon','some attr b'),
(3,'phone','paypal','some attr c'),
(4,'t.v','google','some attr d');

一次填充table_atable_b查詢:

WITH j AS (
  INSERT INTO table_a (product) 
  SELECT DISTINCT(product) FROM original
  ORDER BY product
  RETURNING id,product)
INSERT INTO table_b
SELECT original.id, j.id, original.vendor, original.attr 
FROM original
JOIN j ON j.product = original.product
ORDER BY original.id;

這是table_a的內容..

SELECT * FROM table_a;

 id | product 
----+---------
  1 | phone
  2 | t.v
(2 rows)

.. 和table_b

SELECT * FROM table_b;

 id | table_a_ref | vendor |    attr     
----+-------------+--------+-------------
  1 |           1 | ebay   | some attr a
  2 |           2 | amazon | some attr b
  3 |           1 | paypal | some attr c
  4 |           2 | google | some attr d
(4 rows)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM