Mysql
在先前 SELECT 的同一查詢中插入/更新,具有一些奇異性
我正在嘗試
INSERT|UPDATE
通過從另一個數據庫中選擇數據來執行 a ,這就是我到目前為止所擁有的:INSERT INTO pdone.reps (veeva_rep_id,display_name,username,`first`,`last`,email) SELECT Id, CONCAT(UCASE(LEFT(firstname, 1)),UCASE(LEFT(lastname, 1)),username, firstname, lastname, email FROM veeva.`user` WHERE Id = "00580000003UB5VAAW"
- 第一個問題,我得到了這個錯誤:
$$ Err $$1064 - 您的 SQL 語法有錯誤;檢查與您的 MariaDB 伺服器版本相對應的手冊,以了解在 ‘from veeva.
user
WHERE Id = “00580000003UB5VAAW”’ 在第 1 行而且我不確定查詢有什麼問題,有什麼建議嗎?
firstname
可能是 JOHN 或 John 或 jOhn 或任何我想規範化為 John,UCASE(LEFT(firstname, 1)
這可以嗎?同樣適用於lastname
- 如果
firstname
是 JOHN 和lastname
是 DOE,那麼它們之間username
應該John Doe
有一個空格,CONCATENATE
對嗎?- 我應該插入一些靜態欄位,例如一個 URL,或者
VEEVA
我該怎麼做?此處顯示的查詢中不存在值,而只是在插入avatar_url
和rep_type
- 我打算添加
ON DUPLICATE KEY UPDATE
,但可以添加基於列的限制嗎?讓我們說只有現在才更新>lastSyncDate
?
我製作了一個函式,您只需將字元串放入其中,輸出將位於
Capital Letters
:DELIMITER // CREATE DEFINER=`root`@`%` FUNCTION `LCAPITAL`(eCADENA VARCHAR(150)) RETURNS varchar(150) CHARSET latin1 DETERMINISTIC BEGIN DECLARE vPOSICION INT DEFAULT 0; DECLARE vTMP VARCHAR(150) DEFAULT ''; DECLARE vRESULTADO VARCHAR(150) DEFAULT ''; DECLARE vCADENA VARCHAR(150) DEFAULT ''; IF eCADENA IS NULL THEN SET vRESULTADO=''; RETURN vRESULTADO; ELSE SET vCADENA=LCASE(eCADENA); REPEAT SET vPOSICION=LOCATE(' ', vCADENA); IF vPOSICION=0 THEN SET vPOSICION=CHAR_LENGTH(vCADENA); END IF; SET vTMP=LEFT(vCADENA,vPOSICION); IF CHAR_LENGTH(vTMP) < 4 THEN SET vRESULTADO=CONCAT(vRESULTADO, vTMP); ELSE SET vRESULTADO=CONCAT(vRESULTADO, UPPER(LEFT(vTMP,1)),SUBSTRING(vTMP,2)); END IF; SET vCADENA=RIGHT(vCADENA,CHAR_LENGTH(vCADENA)-vPOSICION); UNTIL CHAR_LENGTH(vCADENA) = 0 END REPEAT; RETURN CONCAT(UPPER(LEFT(vRESULTADO,1)),MID(vRESULTADO,2,150)); END IF; END // DELIMITER ;
例子:
INSERT INTO pdone.reps (veeva_rep_id,display_name,username,`first`,`last`,email) SELECT Id, CONCAT(LCAPITAL(firstname),' ',LCAPITAL(lastname)) AS display_name, username, firstname, lastname, email FROM veeva.`user` WHERE Id = "00580000003UB5VAAW";