mySQL: запрос просто продолжает загружаться

Я хочу объединить 4 таблицы вместе. Одна таблица поступает из базы данных A, а 3 другие таблицы — из базы данных B. Когда я запускаю следующий запрос, компьютер просто продолжает загружаться, без каких-либо ошибок или результатов. Мой запрос:

SELECT tableA.ts, tableA.voltage, tableB.Day0, tableC.Day0, tableD.Day0 FROM databaseA.tableA \
    -> INNER JOIN databaseB.tableB ON tableB.ts \
    -> INNER JOIN databaseB.tableC ON tableC.ts \
    -> INNER JOIN databaseB.tableD ON tableD.ts\
    -> BETWEEN tableA.ts - INTERVAL 50 SECOND AND tableA.ts + INTERVAL 50 SECOND

Поскольку я новичок в SQL, я хотел спросить, имеет ли смысл мой дизайн запроса и есть ли какие-либо проблемы с ним, которые могут вызывать проблемы с запросом, т. Е. (Безостановочная загрузка).

Сложность текущего запроса связана с необходимостью объединения нескольких таблиц из нескольких баз данных. Общность, в которой эти таблицы должны соединяться, будет в ts (отметка времени). Я добавил BETWEEN tableA.ts - INTERVAL 50 SECOND AND tableA.ts + INTERVAL 50 SECOND в дизайн запроса выше, потому что метка времени между таблицами может отличаться на пару секунд.


person Craver2000    schedule 03.02.2018    source источник


Ответы (1)


Это немного долго для комментария.

Ваши ON условия неверны. Вы производите декартовы произведения между таблицами.

ON условия должны быть булевыми сравнениями между двумя (или, возможно, более) таблицами. Итак, ваши выражения должны выглядеть так:

ON tableB.ts = . . .

(Равенство было бы нормальным оператором.)

MySQL преобразует другие типы в логические значения. Для чисел 0 считается «ложным», а все остальное — «истинным» (NULLs — это NULLs).

So:

ON tableB.ts

является приемлемым. Но на самом деле это просто тестирование:

ON tableB.ts <> 0
person Gordon Linoff    schedule 03.02.2018