从具有特定值的相同 table 插入

Insert from same table with certain value

我有一个 table 存储元数据的地方:

id|meta_key|meta_value
========================
 1|gender  |male
 2|gender  |female
 3|gender  |female
 4|gender  |male
 5|gender  |female

现在我想在 meta_value 的基础上添加一个称呼,这样就变成了

id|meta_key  |meta_value
========================
 1|gender    |male
 1|salutation|Hello Mr.
 2|gender    |female
 2|salutation|Hello Mrs.
 3|gender    |female
 3|salutation|Hello Msr.
 4|gender    |male
 4|salutation|Hello Mr.
 5|gender    |female
 5|salutation|Hello Mrs.

虽然这可以与某些 foreach 循环一起使用,但我正在搜索单个语句,因此 MySQL 可以发挥所有作用。

您可以使用 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';

您可以使用带有 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 表达式可能需要稍微调整一下。