从具有特定值的相同 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
:
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'
请注意,根据提供的数据,此查询假定性别只能有两个值之一 - male
和 female
,并且不能包含 null
秒。如果比这更复杂,case
表达式可能需要稍微调整一下。
我有一个 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
:
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'
请注意,根据提供的数据,此查询假定性别只能有两个值之一 - male
和 female
,并且不能包含 null
秒。如果比这更复杂,case
表达式可能需要稍微调整一下。