[英]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。
我要找的基本上是:
因此我們有這樣的事情:
+============+=============+==========+
| 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.