MySQL: поиск серверов из другой таблицы

0

У меня есть таблица table1 a_id, как PK, ipaddress, create_dt Здесь ipaddress является varchar, create_dt является datetime

a_id    ip              create_dt
9205    10.10.10.10     2017-01-07 08:03:32
9206    10.10.10.11     2017-01-06 08:03:32
9207    10.10.10.12     2015-01-07 08:03:32

---more, чем 1000 строк

У меня есть другая таблица mysql со следующими столбцами id как PK, ip, check_type check_status, a_id: Здесь a_id - это внешний ключ из table1

id      ip             check_type    check_status  a_id
1       10.10.10.10    check1        FAIL          9205
2       10.10.10.10    check2        PASS          9205
3       10.10.10.11    check1        PASS          9206
4       10.10.10.11    check2        PASS          9206

Мне нужны все строки из table1 где date(create_dt) >= '2017-01-07' и table1.a_id = table2.a_id и table2.check1 = 'FAIL'

Поэтому из приведенного выше примера мой запрос должен вернуться

a_id    ip              create_dt
9205    10.10.10.10     2017-01-07 08:03:32

Я написал следующий запрос и хочу узнать, есть ли лучший способ написать запрос. Следующий запрос кажется немного медленнее

SELECT *  
FROM table1 a
INNER JOIN table2 b
  ON a.a_id = b.a_id
WHERE date(a.create_dt) >= '2017-01-07'
AND
b.check_status = 'FAIL'
AND b.check_type = 'check1'
Теги:
inner-join

2 ответа

0
Лучший ответ

Сделайте то, что вы используете внутреннее соединение, вы можете назначить условие в том месте, где прямо в пункте on on

SELECT *  
FROM table1 a
INNER JOIN table2 b
  ON a.a_id = b.a_id
    AND date(a.create_dt) >= '2017-01-07'
    AND b.check_status = 'FAIL'
    AND b.check_type = 'check1'

Результат один и тот же. Это просто другой способ выражения условия jon

2

Я написал следующий запрос и хочу знать, есть ли лучший способ написать запрос

Ваш запрос выглядит хорошо. Вы присоединились к двум таблицам с определенным ключом и применили предложения where, которые вы хотели. Итак, мое предложение состояло бы в том, чтобы не указывать дату, например date(a.create_dt). create_dt преобразуйте create_dt в поле date. Применение кастинга может привести к снижению производительности запросов. По возможности старайтесь избегать такого рода отливок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню