[英]Select from two tables, based on 2 columns one of which must not be distinct
[英]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_a
和table_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.