SQL查询LIKE语句错误
SQL query LIKE statement error
我是 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)进行验证。帮我问下应该怎么查询?
使用 WHERE,而不是 HAVING。
也使用单引号,而不是双引号
考虑使用 JOIN 以便 table 关系更清晰
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;
但我没有看到您使用 table 主机中的任何内容,因此我认为您可以将其从查询中排除
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;
首先,从不在FROM
子句中使用逗号。 始终 使用正确的显式 JOIN
语法。因此,您的查询(使用 table 别名)是:
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 数据库的新手。我必须进行查询以过滤 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)进行验证。帮我问下应该怎么查询?
使用 WHERE,而不是 HAVING。 也使用单引号,而不是双引号 考虑使用 JOIN 以便 table 关系更清晰
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;
但我没有看到您使用 table 主机中的任何内容,因此我认为您可以将其从查询中排除
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;
首先,从不在FROM
子句中使用逗号。 始终 使用正确的显式 JOIN
语法。因此,您的查询(使用 table 别名)是:
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
开头的通配符阻止使用索引。
如果您要查找单词,您或许可以使用全文索引。