我有一个存储元数据的表:
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可以完成所有的魔法。
答案 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'
请注意,此查询根据提供的数据假设性别只能包含两个值中的一个 - male
和female
,并且不能包含null
秒。如果它比这更复杂,case
表达式可能需要稍微调整一下。