【问题标题】:Merge problems with SQL使用 SQL 合并问题
【发布时间】:2019-06-13 19:30:24
【问题描述】:

我正在尝试合并两个表

NAME    AGE SALARY      CITY
Mike    29  42000.00    SAN BERNARDINO
Chris   28  52000.00    FRESNO
Shawn   27  35000.00    SACRAMENTO
Chris   28  52000.00    FRESNO

ID  NAME    AGE SALARY  CITY
1   NULL    NULL    NULL    NULL
2   NULL    NULL    NULL    NULL
3   NULL    NULL    NULL    NULL
4   NULL    NULL    NULL    NULL

我希望最终结果如下所示

ID  NAME    AGE SALARY      CITY
1   Mike    29  42000.00    SAN BERNARDINO
2   Chris   28  52000.00    FRESNO
3   Shawn   27  35000.00    SACRAMENTO
4   Chris   28  52000.00    FRESNO


Instead it looks like this below

ID  NAME    AGE SALARY  CITY
1   NULL    NULL    NULL    NULL
2   NULL    NULL    NULL    NULL
3   NULL    NULL    NULL    NULL
4   NULL    NULL    NULL    NULL
NULL    Mike    29  42000.00    SAN BERNARDINO
NULL    Chris   28  52000.00    FRESNO
NULL    Shawn   27  35000.00    SACRAMENTO
NULL    Chris   28  52000.00    FRESNO

到目前为止,我使用 insert into 选项得到了最好的结果,我很想知道。我知道我可以只使用更新或其他东西来一一完成,但我认为这对于更大的桌子来说不是很好。我做了一个没有主键的数据库,主要是看看如何修复它。

INSERT INTO SAMPLE (NAME, AGE, SALARY, CITY)
SELECT NAME, AGE, SALARY, CITY
FROM SAMPLE2

我不确定要更改代码中的哪些内容或如何进行。

编辑:我什至不能正确使用这个网站..

【问题讨论】:

  • 为什么 Mike 的 ID =1?分配顺序重要吗?
  • 不,它没有。
  • 你的 MySql 版本是多少?
  • 昨天刚下载的最新版。
  • 您的查询看起来应该可以工作。你有什么问题?

标签: mysql sql merge


【解决方案1】:

如果您只是想为您的行分配一个 id,它是一种更好的方法,如下所示:

with data as (
  select 'Mike' as NAME,   29 AS AGE, 42000.00 AS SALARY, 'SAN BERNARDINO' AS CITY union all
  select 'Chris',28,52000.00,'FRESNO' union all
  select 'Shawn',27,35000.00,'SACRAMENTO' union all
  select 'Chris',28,52000.00,'FRESNO'
)
select 
  row_number() over (partition by null) as ID,
  d.*
from data d

【讨论】:

    【解决方案2】:

    您可以使用row_number() 函数为SAMPLE2 人工创建ID 并更新SAMPLE

     with cte as (
        select
            *,
            ROW_NUMBER() over (order by CITY) as nr
        from SAMPLE2
    )
    update SAMPLE s
    join cte c
        on s.ID = c.nr
    set  s.NAME = c.NAME
        ,s.AGE = c.AGE
        ,s.SALARY = c.SALARY
        ,s.CITY = c.CITY;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多