需要在 INSERT INTO ... VALUES 中,將某欄位的值設為「子查詢結果 + 變數」的組合。原嘗試語法:
INSERT INTO table(a,b,c) VALUES ('1','2', (SELECT name FROM tab3 WHERE age=1) + test);
但執行失敗,無法入庫。
MySQL 中 + 運算子僅用於數值運算,字串拼接必須使用 CONCAT() 函數。此外,子查詢在 VALUES 子句中需確保只返回單一值。
INSERT INTO table(a, b, c)
VALUES ('1', '2', (SELECT CONCAT(name, 'test') FROM tab3 WHERE age = 1));
若 test 是會話變數或參數,可寫成:
SET @test = 'suffix';
INSERT INTO table(a, b, c)
VALUES ('1', '2', (SELECT CONCAT(name, @test) FROM tab3 WHERE age = 1));
若需批次插入或邏輯更複雜,建議改用 INSERT ... SELECT 語法:
INSERT INTO table(a, b, c)
SELECT '1', '2', CONCAT(name, @test)
FROM tab3
WHERE age = 1;
此寫法更符合 SQL 標準,效能也較好。
CONCAT 參數中任一為 NULL,結果為 NULL,可用 COALESCE 或 IFNULL 處理。MySQL 中字串拼接請使用 CONCAT(),而非 +。結合子查詢與變數時,確保子查詢唯一性,並優先考慮 INSERT ... SELECT 寫法提升可讀性與效能。