簡體   English   中英

SQL 將同一表中的每個字段的新行插入表中

[英]SQL Insert into table new rows foreach field in same table

我有一個類別、子類別和產品的數據庫。 許多子類別,因此他們的產品沒有被父類別采用,所以我試圖使用 SQL 來解決這個問題,但我遇到了一些問題。

所述表具有三列; id_category、id_product、position(它們都是整數)在此表中,每次產品屬於某個類別時,都會針對給定類別的每個 id_category 重復該 id_product。 無論是父類別還是子類別。

例如,我們可以說子類別是 12 而父類別是 143

到目前為止,我嘗試過的是

SELECT id_product FROM category_products WHERE id_category = 12

這確實給了我有興趣制作新行的產品,但我無法使 INSERT 語句工作。

其次,position 也是一個問題,因為我需要 select 最后一個最高的數字,並為每個字段添加一個 +1,因為它是該類別中產品的 position。

我要找的基本上是:

  1. 取 id_product where category = 12
  2. 為每個 id_product 制作一行,其中 category 等於 143
  3. 在 position 中取最高整數,其中類別 = 143 並對其執行 +1

因此我們有這樣的事情:

+============+=============+==========+
| id_product | id_category | position |
+============+=============+==========+
| 190        | 12          | 10       |
+------------+-------------+----------+
| 191        | 12          | 11       |
+------------+-------------+----------+
| 230        | 12          | 12       |
+------------+-------------+----------+
| 15         | 143         | 12       |
+------------+-------------+----------+
| 150        | 143         | 50       |
+------------+-------------+----------+

在 SQL 之后它會像

+============+=============+==========+
| id_product | id_category | position |
+============+=============+==========+
| 190        | 12          | 10       |
+------------+-------------+----------+
| 191        | 12          | 11       |
+------------+-------------+----------+
| 230        | 12          | 12       |
+------------+-------------+----------+
| 15         | 143         | 12       |
+------------+-------------+----------+
| 150        | 143         | 50       |
+------------+-------------+----------+
| 190        | 143         | 51       |
+------------+-------------+----------+
| 191        | 143         | 52       |
+------------+-------------+----------+
| 230        | 143         | 53       |
+------------+-------------+----------+

我嘗試了幾種不同的語法和一切,但它一直只向我返回錯誤。 (順便說一句,這是在 PHPMyAdmin 中完成的)。

如果 MySQL 8.0 或更高版本,您可以使用下一個查詢:

INSERT IGNORE INTO products
SELECT 
    id_product,
    143 as id_category,
    (
       SELECT MAX(position) 
       FROM products
       WHERE id_category = 143
     ) + 
     (row_number() over (order by id_product)) as position
FROM products
WHERE id_category = 12;

SQLize.online的結果:

+============+=============+==========+
| id_product | id_category | position |
+============+=============+==========+
| 190        | 12          | 10       |
+------------+-------------+----------+
| 191        | 12          | 11       |
+------------+-------------+----------+
| 230        | 12          | 12       |
+------------+-------------+----------+
| 15         | 143         | 12       |
+------------+-------------+----------+
| 150        | 143         | 50       |
+------------+-------------+----------+
| 190        | 143         | 51       |
+------------+-------------+----------+
| 191        | 143         | 52       |
+------------+-------------+----------+
| 230        | 143         | 53       |
+------------+-------------+----------+

暫無
暫無

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

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