簡體   English   中英

MySQL 按列名替換表中的值

[英]MySQL Replace value in table by column name

我有一個看起來像這樣的MySQL表,其中pKey是 primary_AI 鍵。

+------+-----------+----------+----------+
| pKey | firstName | LastName | Username |
+------+-----------+----------+----------+
|    1 | John      | Brown    | jBrown   |
|    2 | Jake      | Smith    | jSmith   |
|    3 | Mary      | Laurier  | mLaurier |
+------+-----------+----------+----------+

我想創建一個查詢,它可以在給定firstName時替換LastName屬性。 例如,當提供JohnfirstName時,例如,我想將姓氏更改為Wilson

我編寫此查詢是為了在提供名字時替換(或如果不存在則自動創建行)姓氏。

REPLACE into `myTableName` (LastName, Username) VALUES ("Wilson", "jWilson") WHERE firstName = "John";

我期待這個查詢將John Brown的記錄更改為John Wilson並將 jBrown 的用戶名jBrownjWilson 如果名字為John的行不存在,我還希望它創建一個新行,其中John的值為firstNameWilsonLastName ,並將用戶名更改為jWilson

我知道我可以通過多個查詢來做到這一點,例如SELECT名字,如果不存在則INSERT ,或者DELETE記錄並在存在時再次INSERT ,但是我有很多記錄需要一次插入並且想要在單個查詢中執行此操作。

我怎樣才能解決這個問題?

這應該這樣做:

REPLACE into `myTableName` (Username) VALUES (CONCAT(SUBSTR(firstname,0,1),lastname))) WHERE firstName = "John";

一旦它按照您想要的方式工作,請刪除 WHERE

要更新現有值,請使用UPDATE

UPDATE `myTableName` SET username =  LCASE(CONCAT(SUBSTR(firstname,0,1),lastname))) WHERE firstName = "John";

一種 hacky 方法可以做到這一點,因為您不想將unique約束添加到 first_name 列,即使您確定它將是唯一的,將是獲取 firstName = 'John' 的行的 pKey,並且如果不存在,請改用將為 pKey 生成的下一個值(因為它設置為 auto_increment),並on duplicate key update時使用:

INSERT INTO table_name
 select (coalesce((select pKey from table_name where firstName = 'John'),
 (SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_NAME = "table_name"))) as pKey,
 'John' as firstName,
 'Wilson' as lastName,
 'jWilson' as userName
on duplicate key update lastName = 'Wilson', userName = 'jWilson';

小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM