Соединить три таблицы MySQL, где

0

Во-первых, я понимаю, что есть другие подобные вопросы, я прочитал многие из них, и я не могу понять это.

У меня есть три таблицы.

urilist
----------------
rowid | uri
1000      xyz
1001      abc
1002      cde
1003      fgh

wordlist
----------------
rowid | word
1      word1
2      word2
3      word3
4      word4

wordlocation2
----------------
uriid | wordid
1001      1
1001      2
1001      3
1001      4

Таблицу удержания. Таблица b содержит слова. Таблица c представляет собой таблицу поиска, в которой вы можете увидеть каждое слово, связанное с uri или наоборот.

Мне нужно вернуть слова для данного uri. поэтому для uri abc мне нужны слова word1,word2,word3,word4.

Это была моя последняя попытка.

select word from wordlist join wordlocation2 on wordlist.rowid = 

wordlocation2.wordid 
left join urilist on wordlocation2.uriid = urilist.rowid 
and urilist.uri =  "a uri address";

Это вернуло тысячи несвязанных ответов. Я не уверен в лучшем способе сделать это. Любая помощь приветствуется.

Теги:
where
join

3 ответа

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

Давайте посмотрим на ваш результат запроса, выбрав *. Я использовал "адрес uri", предоставленный вами для демонстрации относительно LEFT JOIN

Запрос:

select * from wordlist join wordlocation2 on wordlist.rowid = wordlocation2.wordid left join urilist on wordlocation2.uriid = urilist.rowid and urilist.uri =  "a uri address";

Это даст результат ниже

Изображение 174551

Поскольку вы сделали wordlocation2 LEFT JOIN urilist, даже если для urilist нет соответствующей строки, в результате значение будет иметь значение urilist как NULL (это значение левого объединения). В вашем случае вы не должны получать никакого значения, если нет соответствующей строки. Итак, используйте JOIN вместо LEFT JOIN.

select * from wordlist join wordlocation2 on wordlist.rowid = wordlocation2.wordid join urilist on wordlocation2.uriid = urilist.rowid where urilist.uri =  "abc";

Я думаю, что порядок таблиц не имеет значения, так как здесь все внутреннее соединение. Я всегда готов исправить себя, если кто-нибудь даст какое-то предложение по этому поводу.

  • 0
    Сделал трюк, спасибо!
0

Это должен быть ваш запрос:

select l.word from urilist u
join wordlocation2 w on w.uriid = u.rowid
join wordlist l on l.rowid = wordid
where u.uri = 'some_uri'
0

Использование:

select u.uri, wl.word
from urilist u
join wordlocation2 wl2 on wl2.uriid = u.id
join wordlist wl on wl2.wordid = wl.rowid

Ещё вопросы

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