【问题标题】:joining 2 tables in sql which has no dependency on each other在sql中加入2个相互不依赖的表
【发布时间】:2021-03-30 09:58:22
【问题描述】:

我有 2 个表,方式如下

表 1:

e_id  e_name  e_salary  e_age  e_gender  e_dept
---------------------------------------------------
1     sam     95000     45     male      operations
2     bob     80000     21     male      support
3     ann     125000    25     female    analyst

表 2:

d_salary  d_age  d_gender  e_dept
----------------------------------
 34000     25     male      Admin
 56000     41     female    Tech
 77000     35     female    HR

我想要这样的输出:

e_id  e_name  e_salary  e_age  e_gender  e_dept      d_salary  d_age  d_gender  e_dept
1     sam     95000     45     male      operations  34000     25     male      Admin
2     bob     80000     21     male      support     56000     41     female    Tech
3     ann     125000    25     female    analysts    77000     35     female    HR

表之间没有依赖关系。没有共同的列。没有主键或外键。 我尝试使用导致重复行的交叉连接,因为它适用于 M X N

我是这个 SQL 的新手。有人能帮助我吗?提前致谢

【问题讨论】:

  • 预期的结果有意义吗?我不明白你为什么要这样做。 Table2的目的是什么?
  • 你为什么这样做?如果单元格之间没有关系,则行不是行。
  • 第二张桌子有什么订单吗?那你怎么知道Admin需要加入e_id = 1
  • @jarlh,我知道这很奇怪。但这是我必须做的。这只是对我必须做的工作的一个虚拟解释。我必须添加 2 个没有依赖关系的单独表来形成一个包含表列及其数据的新表。而且我也不知道它是否可行。这就是为什么要征求其他人的意见
  • @S-Man,请不要介意数据。这只是随机数据。我的主要目的是以上述方式加入 2 个不同的表。但是这两个表之间没有依赖或关系。

标签: sql postgresql join


【解决方案1】:

虽然我没有得到您想要的输出背后的原因,但您可以通过以下查询获得:

select a.e_id  ,a.e_name  ,a.e_salary  ,a.e_age  ,a.e_gender  ,a.e_dept,b.d_salary  ,b.d_age  ,b.d_gender  ,b.e_dept
from 
(select e_id  ,e_name  ,e_salary  ,e_age  ,e_gender  ,e_dept, row_number()over(order by e_id)rn
from table1)a
inner join 
(select d_salary  d_age  d_gender  e_dept,row_number()over(order by d_salary) rn
from table 2) b
on a.rn=b.rn

【讨论】:

    【解决方案2】:

    通常,您可以在两个表上使用row_number() window function 创建行计数,并将其用作连接条件。但这需要两个表的特定顺序,这意味着您已经明确告诉查询为什么 Admin 记录排在第一位,并且必须在表 1 的第一条记录上连接:

    SELECT
        *
    FROM (
        SELECT
            *,
            row_number() OVER (ORDER BY e_id) as row_count -- assuming e_id is your order criterion
        FROM table1
    ) t1
    JOIN (
        SELECT
            *,
            row_number() OVER (ORDER BY /*whatever you expect to be ordered*/) as row_count
        FROM table2
    ) t2
    ON t1.row_count = t2.row_count
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2021-12-30
      • 1970-01-01
      • 2021-09-01
      • 2011-03-01
      • 2021-01-21
      相关资源
      最近更新 更多