SQL查询LIKE语句错误

时间:2018-05-08 08:06:25

标签: mysql sql mysql-python cacti

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

identity
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;

我想只用tsp短名称验证(WZRX79ZTNY中的TNY)。帮帮我怎么查询呢?

2 个答案:

答案 0 :(得分:0)

使用WHERE,而不是HAVING。 也使用单引号,而不是双引号 考虑使用JOIN使表关系更加清晰

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

但我没有看到你使用表主机中的任何内容,所以我认为你可以从查询中排除

SELECT data_template_data.data_source_path, data_template_data.name_cache 
    FROM data_local
    INNER JOIN data_template_data ON data_local.id=data_template_data.local_data_id
    WHERE data_template_data.name_cache like '%TNY%eth0' 
    ORDER BY data_local.id;

答案 1 :(得分:0)

首先,从不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开头的通配符阻止了索引的使用。

如果您正在寻找单词,则可以使用全文索引。