【问题标题】:SQL query to insert sinlge row from one table into multiple rows in another tableSQL查询将一个表中的单行插入另一个表中的多行
【发布时间】:2014-02-14 19:25:40
【问题描述】:

我有桌子 表_1:

PID DIV1 DES1 DIV2 DES2 DIV3 DES3  DIV4  DES4 DIV5  DES5
1    D1   DS1 D2  DS2    D3   DS3  null  null D5    null

输出

table_2:

TID PID DIV DES
001  1   D1  DS1
002  1   D2  DS2
003  1   D3  DS3
004  1   D5  null

我需要正确的插入语句从 table_1 插入到 table_2。如果表在 DIV 和 DES 上都有空值,那么我不应该插入这些字段。

谢谢

【问题讨论】:

  • 这是不可读的。你能重新格式化你的表格吗?

标签: mysql sql sql-server sql-server-2008


【解决方案1】:

在 SQL Server 中,您可以使用

WITH a(PID, DIV, DES, NO) as (
    SELECT PID, DIV1, DES1, 1 FROM table_1 WHERE DIV1 IS NOT NULL OR DES1 IS NOT NULL
    UNION ALL
    SELECT PID, DIV2, DES2, 2 FROM table_1 WHERE DIV2 IS NOT NULL OR DES2 IS NOT NULL
    UNION ALL
    SELECT PID, DIV3, DES3, 3 FROM table_1 WHERE DIV3 IS NOT NULL OR DES3 IS NOT NULL
    UNION ALL
    SELECT PID, DIV4, DES4, 4 FROM table_1 WHERE DIV4 IS NOT NULL OR DES4 IS NOT NULL
)
INSERT INTO table_2(TID, PID, DIV, DES)
SELECT ROW_NUMBER() OVER(order by PID, NO), PID, DIV, DES FROM a

在 MySQL 中,您可以将其更改为

INSERT INTO table_2(TID, PID, DIV, DES)
SELECT @i := @i + 1, PID, DIV, DES
  FROM (
    SELECT PID, DIV1 as DIV, DES1 as DES, 1 as NO FROM table_1 WHERE DIV1 IS NOT NULL OR DES1 IS NOT NULL
    UNION ALL
    SELECT PID, DIV2, DES2, 2 FROM table_1 WHERE DIV2 IS NOT NULL OR DES2 IS NOT NULL
    UNION ALL
    SELECT PID, DIV3, DES3, 3 FROM table_1 WHERE DIV3 IS NOT NULL OR DES3 IS NOT NULL
    UNION ALL
    SELECT PID, DIV4, DES4, 4 FROM table_1 WHERE DIV4 IS NOT NULL OR DES4 IS NOT NULL
   ) AS a,
   (select @i := 0) AS temp
order by PID, NO

【讨论】:

  • 感谢您的回复,我收到以下错误错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行 0.031 秒处的 'WITH a(PID, DIV, DES, NO) as (SELECT PID, DIV1, DES1, 1 FROM table_1 WHERE' 附近使用正确的语法跨度>
  • 因为它被标记为 [sql-server-2008],所以我使用了语法。我现在添加了 MYSQL 语法。
猜你喜欢
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2023-03-09
相关资源
最近更新 更多