簡體   English   中英

用於將sinlge行從一個表插入另一個表中的多個行的SQL查詢

[英]SQL query to insert sinlge row from one table into multiple rows in another table

我有桌子table_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

我需要將insert語句從table_1插入到table_2。 如果表在DIV和DES上都有空值,那么我不應該插入這些字段。

謝謝

在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM