从同一个表中插入一定的值

时间:2015-10-10 11:41:58

标签: mysql sql sql-insert

我有一个存储元数据的表:

Line(22) The Error is: Expected primary-expression before '&' token
Line(24) The Error is: Expected primary-expression before '&' token
Line(26) The Error is: Expected primary-expression before '&' token
Line(28) The Error is: Expected primary-expression before '&' token

现在我想添加一个基于id|meta_key|meta_value ======================== 1|gender |male 2|gender |female 3|gender |female 4|gender |male 5|gender |female 的称呼,因此它变为

meta_value

虽然这可能适用于一些foreach循环,但我正在搜索单个语句,因此MySQL可以完成所有的魔法。

2 个答案:

答案 0 :(得分:2)

您可以使用INSERT INTO SELECT

<强> SqlFiddleDemo

INSERT INTO table_name(id, meta_key, meta_value)
SELECT
    id,
   'salutation' AS meta_key,
    CASE WHEN meta_value = 'male' THEN 'Hello Mr.'
         ELSE 'Hello Mrs.'
    END AS meta_value
FROM table_name
WHERE meta_key = 'gender';

答案 1 :(得分:1)

您可以使用带有case表达式的insert-select语句来生成适当的称呼:

INSERT INTO mytable (id, meta_key, meta_value)
SELECT id, 
       'salutation', 
       CONCAT('Hello ', CASE meta_value WHEN 'male' THEN 'Mr. ' ELSE 'Mrs. ' END)
FROM   mytable
WHERE  meta_key = 'gender'

请注意,此查询根据提供的数据假设性别只能包含两个值中的一个 - malefemale,并且不能包含null秒。如果它比这更复杂,case表达式可能需要稍微调整一下。