Как переписать это неявное, где join в явное соединение - PullRequest
0 голосов
/ 05 мая 2011
 SELECT * FROM `users` u, `markers` m,`imagemarkers` im
 WHERE u.username LIKE '%test%'
  OR u.email LIKE '%test%'
  OR u.location LIKE '%test%'
  OR m.author LIKE '%test%'
  OR m.bike LIKE '%test%'
  OR m.title LIKE '%test%'

Я столкнулся с этим SQL в вопросе, но не смог дать ответ, потому что я отказываюсь писать where join запросов.

Дает ли это неявное соединение ожидаемый (короткий) результатили это дает перекрестное объединение и почему?
Как мне переписать это, используя явные объединения, без добавления новых условий, чтобы не было совпадений (user.id = markers.user_id) и т. п.

1 Ответ

3 голосов
/ 05 мая 2011

Это перекрестное соединение. Попробуйте что-то вроде этого (обратите внимание, что я полагаю, что таблица маркеров и таблица изображений имеют ссылку на таблицу пользователей. Это может быть не так!)

SELECT * FROM `users` u, `markers` m,`imagemarkers` im
 WHERE m.user_id = i.id AND im.user_id = u.id
  AND (u.username LIKE '%test%'
  OR u.email LIKE '%test%'
  OR u.location LIKE '%test%'
  OR m.author LIKE '%test%'
  OR m.bike LIKE '%test%'
  OR m.title LIKE '%test%')

Я не уверен, что вы подразумеваете под "явным объединением", но я думаю:

SELECT * FROM `users` u 
 inner join `markers` m on (m.user_id = i.id) 
 inner join  `imagemarkers` im on (im.user_id = u.id) 
 WHERE u.username LIKE '%test%'
  OR u.email LIKE '%test%'
  OR u.location LIKE '%test%'
  OR m.author LIKE '%test%'
  OR m.bike LIKE '%test%'
  OR m.title LIKE '%test%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...