У меня есть две таблицы:
1. tableA - список записей со многими столбцами. Существует столбец временной отметки «created»
2. tableB используется для отслеживания пользователей в моем приложении, которые заблокировали запись в таблицеA для просмотра. Он состоит из четырех столбцов: id, user_id, record_id и другой столбец временной метки.Почему инструкция SELECT ... JOIN не возвращает результаты?
Я пытаюсь выбрать до 10 записей из таблицы A, которые не были заблокированы для просмотра кем-либо в таблицеB (я также фильтрую в предложении WHERE несколькими другими столбцами из tableA, как состояние записи). Вот что я придумал до сих пор:
SELECT tableA.* FROM tableA
LEFT OUTER JOIN tableB ON tableA.id = tableB.record_id WHERE
tableB.id = NULL AND
tableA.status = 'new' AND
tableA.project != 'someproject' AND
tableA.created BETWEEN '1999-01-01 00:00:00' AND '2010-05-06 23:59:59'
ORDER BY tableA.created ASC LIMIT 0, 10;
Есть в настоящее время несколько тысяч записей в TABLEA и нулевые записи в TableB. Есть, безусловно, записи, попадающие между этими метками времени, и я проверил это с помощью простого
SELECT * FROM tableA WHERE
created BETWEEN '1999-01-01 00:00:00' AND '2010-05-06 23:59:59'
Первое утверждение выше возвращает ноль строк, а второй один возвращает более 2000 строк.
Отлично. Работал как шарм. Спасибо! – Stephen