![](/img/trans.png)
[英]MySQL Selecting multiple rows with the same joining ID from the same table
[英]SQL insert multiple values and parent id by selecting from same table
如何通過從同一個表中選擇來插入多個值和父 ID
我在下面嘗試並收到錯誤
INSERT IGNORE INTO ctg_tbl (`ctg_name`,`ctg_img`,`ctg_parent_id`)
VALUES
('Gravy', 'GravyImg', (SELECT id FROM ctg_tbl WHERE ctg_name='Foods')),
('Curry', 'CurryImg', (SELECT id FROM ctg_tbl WHERE ctg_name='Foods')),
('Ball', 'BallImg', (SELECT id FROM ctg_tbl WHERE ctg_name='Games'))
MySQL 說:文檔 #1093 - 表 'ctg_tbl' 被指定兩次,既作為 'INSERT' 的目標,也作為單獨的數據源
您的查詢可以通過簡單地將其轉換為INSERT INTO ... SELECT
來工作:
INSERT IGNORE INTO ctg_tbl (ctg_name, ctg_img, ctg_parent_id)
SELECT 'Gravy', 'GravyImg', id FROM ctg_tbl WHERE ctg_name = 'Foods'
UNION ALL
SELECT 'Curry', 'CurryImg', id FROM ctg_tbl WHERE ctg_name = 'Foods'
UNION ALL
SELECT 'Ball', 'BallImg', id FROM ctg_tbl WHERE ctg_name = 'Games';
試試這個
DECLARE @FoodID INT = (SELECT TOP (1) id FROM ctg_tbl WHERE ctg_name = 'Foods')
DECLARE @GameID INT = (SELECT TOP (1) id FROM ctg_tbl WHERE ctg_name = 'Games')
INSERT IGNORE INTO ctg_tbl (`ctg_name`,`ctg_img`,`ctg_parent_id`)
VALUES
('Gravy', 'GravyImg', @FoodID),
('Curry', 'CurryImg', @FoodID),
('Ball', 'BallImg', @GameID)
通過使用ROW 構造函數創建一個包含每行 3 個值的 CTE,您可以在INSERT
語句中將其連接到表:
INSERT IGNORE INTO ctg_tbl (ctg_name , ctg_img , ctg_parent_id )
WITH cte(ctg_name , ctg_img , ctg_parent_name) AS (
VALUES
ROW('Gravy', 'GravyImg', 'Foods'),
ROW('Curry', 'CurryImg', 'Foods'),
ROW('Ball', 'BallImg', 'Games')
)
SELECT c.ctg_name, c.ctg_img, t.id
FROM cte c INNER JOIN ctg_tbl t
ON t.ctg_name = ctg_parent_name;
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.