【发布时间】:2020-08-08 22:26:34
【问题描述】:
带有特殊字符 () 的 SQL 查询
original query(非常感谢GMB)可以在地址(users 表)中找到与地址(address_effect 表)匹配的任何项目。
如果地址包含','查询工作正常,但如果地址字段中有'()',我似乎无法使其工作。
这是不工作的 sql 查询:
UPDATE users u
SET u.COUNT = (
SELECT COUNT(*) FROM address_effect a
WHERE FIND_IN_SET(a.address, REPLACE(u.address, ', ', ','')'))
)
仅供参考,我正在使用 XAMPP(使用 MariaDB)在本地系统上对此进行测试。
我尝试通过在 '()' 前面加上反斜杠 '' 来将其识别为转义字符,但它没有帮助。
用户表
+--------+-------------+---------------+--------------------------+--------+
| ID | firstname | lastname | address | count |
| | | | | |
+--------------------------------------------------------------------------+
| 1 | john | doe |james street, idaho, usa | |
| | | | | |
+--------------------------------------------------------------------------+
| 2 | cindy | smith |rollingwood av,lyn, canada| |
| | | | | |
+--------------------------------------------------------------------------+
| 3 | rita | chatsworth |arajo ct, alameda, cali | |
| | | | | |
+--------------------------------------------------------------------------+
| 4 | randy | plies |smith spring, lima, (peru)| |
| | | | | |
+--------------------------------------------------------------------------+
| 5 | Matt | gwalio |park lane, (atlanta), usa | |
| | | | | |
+--------------------------------------------------------------------------+
address_effect表
+---------+----------------+
|address |effect |
+---------+----------------+
|idaho |potato, tater |
+--------------------------+
|canada |cold, tundra |
+--------------------------+
|fremont | crowded |
+--------------------------+
|peru |alpaca |
+--------------------------+
|atlanta |peach, cnn |
+--------------------------+
|usa |big, hard |
+--------+-----------------+
【问题讨论】:
-
如果您的表格设计正确,您将不会遇到此类问题。在列中存储以逗号分隔的值列表几乎总是表明数据库设计不佳。