我有两张独立的表格:
Emp: id, name, bossid
Data: d_id, d1, d2, d3, d4, d5
我想在 postgreSQL :
中创建一个新表Goal: id, name, bossid, d_id, d1, d2, d3, d4, d5
哪种查询适合?
EDIT 结果表
id | name | bossid | d_id | d1 | d2 | d3 ...
-------------------------------------------------------------------
| | | | | |
EDIT2
Goal
表将包含Emp
中的所有记录以及Data
中相同数量的记录。所以它就像LEFT JOIN
但我没有ON
条件,因为表格没有关系。
答案 0 :(得分:1)
您可以使用交叉联接,但这可能会产生不良后果,具体取决于您的需求。
CREATE TABLE Goal AS
SELECT *
FROM Emp CROSS JOIN Data
答案 1 :(得分:0)
CREATE TABLE result AS
SELECT e.*, d.*
FROM emp e
LEFT JOIN (SELECT * FROM data LIMIT 1) d ON TRUE
这正是你所要求的
由于缺乏定义,我采用了最便宜的解决方案,从Data
中选择了一行中的任意一行,以附加到Emp
的每一行。
结果表包含来自Emp
的所有行,无论Data
中的行数是多少,甚至可以为空。
CREATE TABLE result AS
SELECT id, name, bossid, d_id, d1, d2, d3, d4, d5
FROM (SELECT *, row_number() OVER () AS rn FROM emp) e
LEFT JOIN (SELECT *, row_number() OVER () AS rn FROM data) d USING (rn)
与上面相同,但附加了Data
的任意不同行。同样,适用于Data
中的0-n行。
Data
中此行数的效果:
Data
中的0行:结果中表示的所有行; Data
列中的所有行都为NULL。Emp
:结果中表示的所有行;来自Emp
的多余行在Data
的列中为空。Emp
:来自Data
的任意多余行丢失;没有额外的NULL值。