[英]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
屬性。 例如,當提供John
的firstName
時,例如,我想將姓氏更改為Wilson
。
我編寫此查詢是為了在提供名字時替換(或如果不存在則自動創建行)姓氏。
REPLACE into `myTableName` (LastName, Username) VALUES ("Wilson", "jWilson") WHERE firstName = "John";
我期待這個查詢將John Brown
的記錄更改為John Wilson
並將 jBrown 的用戶名jBrown
為jWilson
。 如果名字為John
的行不存在,我還希望它創建一個新行,其中John
的值為firstName
, Wilson
為LastName
,並將用戶名更改為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.