У меня есть 4 таблицы, которые нужно объединить более чем в одном поле, и я не могу заставить его работать, когда в таблице 3 нет данных
Т1
id primary key
user_id
mydata
Т2
id primary key
user_id
entry_id
mydata
Т3
id primary key
user_id
entry_id
mydata
Т4
id primary key
user_id
entry_id
mydata
Я хочу вернуть все T1, где строка поиска соответствует любой из трех других таблиц:
SELECT DISTINCT(id) as id FROM T1
LEFT JOIN T2 ON (T1.user_id = T2.user_id AND T2.entry_id = T1.id)
LEFT JOIN T3 ON (T1.user_id = T3.user_id AND T3.entry_id = T1.id)
LEFT JOIN T4 ON (T1.user_id = T4.user_id AND T4.entry_id = T1.id)
AND (T1.mydata LIKE :s OR T2.mydata LIKE :s OR T3.mydata LIKE :s OR T4.mydata LIKE :s)
Запрос работает, когда все таблицы имеют записи, но если, скажем, у T3 нет записей, соответствующих entry_id, ничего не возвращается.
Что я делаю не так? Кажется, я не могу решить эту проблему ... пожалуйста, помогите






Мне удалось решить проблему, заменив AND на WHERE, так что это:
SELECT DISTINCT(id) as id FROM T1
LEFT JOIN T2 ON (T1.user_id = T2.user_id AND T2.entry_id = T1.id)
LEFT JOIN T3 ON (T1.user_id = T3.user_id AND T3.entry_id = T1.id)
LEFT JOIN T4 ON (T1.user_id = T4.user_id AND T4.entry_id = T1.id)
AND (T1.mydata LIKE :s OR T2.mydata LIKE :s OR T3.mydata LIKE :s OR T4.mydata LIKE :s)
становится:
SELECT DISTINCT(id) as id FROM T1
LEFT JOIN T2 ON (T1.user_id = T2.user_id AND T2.entry_id = T1.id)
LEFT JOIN T3 ON (T1.user_id = T3.user_id AND T3.entry_id = T1.id)
LEFT JOIN T4 ON (T1.user_id = T4.user_id AND T4.entry_id = T1.id)
WHERE (T1.mydata LIKE :s OR T2.mydata LIKE :s OR T3.mydata LIKE :s OR T4.mydata LIKE :s)
Кажется, что AND заставляло критерии поиска становиться частью последнего левого соединения или что-то в этом роде.