SQL-запрос как ошибка оператора - PullRequest
0 голосов
/ 08 мая 2018

Я новичок в базе данных 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 (TNY в WZRX79ZTNY). Помогите мне, как мне сделать запрос?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Во-первых, никогда используйте запятые в предложении 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 запрещает использование индекса.

Если вы ищете слова, вы можете использовать полнотекстовый индекс.

0 голосов
/ 08 мая 2018

используйте ГДЕ, НЕ ИМЕЯ. также используется одинарная кавычка, а не двойная кавычка рассмотрите возможность использования 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;

но я не вижу, чтобы вы использовали что-либо из таблицы host, поэтому я думаю, что вы можете исключить это из вашего запроса

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...