mysql - SQL查询LIKE语句错误

标签 mysql sql mysql-python cacti

我是 mysql 数据库的新手。我必须进行查询来过滤 name_cache,其中在查询中包含 TNY 或 eth0! 这是我当前的查询--

SELECT data_template_data.data_source_path, data_template_data.name_cache
FROM data_local, data_template_data,host
WHERE data_local.id=data_template_data.local_data_id AND
      data_local.host_id=host.id
HAVING data_template_data.name_cache like "%TNY%eth0"
ORDER BY data_local.id;
<小时/>
    data_source_path                               | name_cache                      
| <path_rra>/r1f-sinx03ztny_traffic_in_15846.rrd | R1F-SINX03ZTNY - Traffic - eth0 |
| <path_rra>/r1f-sinx04ztny_traffic_in_15857.rrd | R1F-SINX04ZTNY - Traffic - eth0 |
| <path_rra>/r1f-wzrx79ztny_traffic_in_16343.rrd | R1F-WZRX79ZTNY - Traffic - eth0 |

我只想使用 tsp 短名称(WZRX79ZTNY 中的 TNY)进行验证。帮我看看我该如何查询?

最佳答案

首先,永远不要FROM子句中使用逗号。 始终使用正确的显式JOIN语法。因此,您的查询(带有表别名)是:

SELECT td.data_source_path, td.name_cache
FROM data_local l JOIN
     data_template_data td 
     ON l.id = td.local_data_id
     host h
     ON l.host_id = h.id
WHERE td.name_cache like '%TNY%eth0'
ORDER BY l.id;

您没有使用host(除非检查l.host_id不为空)。同样,您不需要 data_local。所以,我认为这与您的查询的作用相同:

SELECT td.data_source_path, td.name_cache
FROM data_template_data td
WHERE td.name_cache like '%TNY%eth0'
ORDER BY td.local_data_id;

对于这个查询,您无能为力。您也许可以在 data_template_data(local_data_id) 上使用索引。不幸的是,like 开头的通配符阻止了索引的使用。

如果您要查找单词,您也许可以使用全文索引。

关于mysql - SQL查询LIKE语句错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50228869/

相关文章:

mysql - 从sequelize关联检索值时出错

mysql - 行大小太大错误,即使它不是

MySQL Select 列搞砸了

mysql - SELECT 标签和项目的关联

python - 从 python 和 MySQLdb 中的 Json 对象获取字符串

java - 我应该以什么顺序将对象放入数据库?

Mysql 未对结果进行排名,全文

sql - 添加总计行并转换为百分比

python - 在 Windows 7 机器上安装 MySQL-python 时出错

python - mysql-python 排序规则问题 : how to force unicode datatype?