我有這個與表單連接的 PHP 代碼(使用 nette 框架),每個表中的列名都不同,但geo列在每個人中:
$this->masterRepository->query("
INSERT INTO ".$table." (".$cols.")
SELECT ".$cols."
CASE
WHEN `geo` = '".$values['old_text']."' THEN `geo` = '".$values['new_text']."'
ELSE `geo` = '".$values['new_text']."'
END
FROM ".$table." WHERE `geo` = '".$values['old_text']."';
");
生成此 SQL:
INSERT INTO some_table (num_order, geo, url, note)
SELECT num_order, geo, url, note
CASE
WHEN `geo` = 'US' THEN `geo` = 'CA'
ELSE `geo` = 'CA'
END
FROM some_table
WHERE `geo` = 'US';
但我收到此錯誤:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE
WHEN `geo` = 'US' THEN `geo` = 'CA'
目標是將資料復制到同一個表中,但在插入之前更改地理列的值。我知道 ELSE 值看起來很愚蠢,但 CASE 總是以相同的方式結束,因為 WHERE 選擇。
我該如何解決這個錯誤或者我應該使用不同的方法?謝謝。
uj5u.com熱心網友回復:
語法錯誤是因為您在CASE. 但是在修復之后查詢還有其他問題。
您根本不需要CASE運算式,因為該WHERE子句僅選擇這些行。你想要的是:
INSERT INTO some_table (num_order, url, note, geo)
SELECT num_order, url, note, 'CA'
FROM some_table
WHERE `geo` = 'US';
要對您的變數執行此操作,您需要洗掉geofrom$cols以便SELECT ".$cols不包含它,您可以$values["new_text"]在SELECT串列末尾添加。
$cols1 = str_replace('geo,', '', $cols);
$this->masterRepository->query("
INSERT INTO ".$table." (".$cols1.", geo)
SELECT ".$cols1.", '".$values['new_text']."'
FROM ".$table."
WHERE `geo` = '".$values['old_text']."';
");
uj5u.com熱心網友回復:
您的別名note應該是錯誤的,case
并且沒有使用,where因為您正在使用CASE
INSERT INTO some_table (num_order, geo, url, note)
SELECT num_order, geo, url,
CASE
WHEN `geo` = 'US' THEN `geo` = 'CA'
ELSE `geo` = 'CA'
END as note
FROM some_table
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385378.html
上一篇:在GROUPBY查詢中回傳空值
