Вложеный запрос.

EESeregin

Добрый день!Есть 2 талици 1- справочник населенных пунктов (id, gorod_n). 2-табица со сведениями о сотрудниках, в ней поля: домашний адрес по прописке, и по факту. В адресах стоит просто код (id - города). Как написать запрос чтобы в таблице сотрудников вместо кодов городов были подстановочные значения из справочника городов.
11 ответов

EESeregin

Не получается выбрать подстановочное значение 2 раза из одной таблици.


EESeregin

Не получается выбрать подстановочное значение 2 раза из одной таблици.
то есть? Можешь показать запрос, который не работает?


EESeregin

Длинноват... c трудом сократилSELECT sp_uchen.fam, sp_uchen.nam, sp_uchen.otch, sp_uchen.punct_prop, sp_uchen.punct_zh, gorod.gorod_namFROM sp_uchen, gorodWHERE gorod.gor_id = sp_uchen.punct_propAND gorod.gor_id = sp_uchen.punct_zhLIMIT 0 , 30


EESeregin

Смотрим на это
<pre class="prettyprint linenums">WHERE gorod.gor_id = sp_uchen.punct_prop <span>AND</span> gorod.gor_id = sp_uchen.punct_zh </pre>
и видим, что записи из sp_uchen, в которых punct_prop<>punct_zh, идут лесом. Запрос составлен неверно.Ищите тут про алиасы таблиц и приджойнивайте таблицу городов 2 раза.


EESeregin

Смотрим на этои видим, что записи из sp_uchen, в которых punct_prop<>punct_zh, идут лесом. Запрос составлен неверно.Ищите тут про алиасы таблиц и приджойнивайте таблицу городов 2 раза.
В чем проблема я понял, не могу найти работающее решение, алиасы если вы имеете в виду AS не работает в WHERE. Что означает приджойнивайте таблицу ?


EESeregin

EESeregin,
select tbl.*,d.name,d2.name
from tbl
left join dict as d1 on t.id1=d1.id
left join dict as d2 on t.id2=d2.id
where ...


EESeregin

SELECT sp_uchen.fam, sp_uchen.nam, sp_uchen.otch, sp_uchen.punct_prib, sp_uchen.punct_zh, gorod.gorod_namFROM sp_uchenINNER JOIN gorod ON sp_uchen.punct_prib = gorod.gor_idINNER JOIN gorod ON sp_uchen.punct_zh = gorod.gor_idLIMIT 0 , 30


EESeregin

SELECT sp_uchen.fam, sp_uchen.nam, sp_uchen.otch, sp_uchen.punct_prop, sp_uchen.punct_zh, gorod.gorod_namFROM sp_uchenINNER JOIN gorod ON sp_uchen.punct_prop= gorod.gor_idINNER JOIN gorod ON sp_uchen.punct_zh = gorod.gor_idLIMIT 0 , 30
#1066 - Not unique table/alias: 'gorod' - такая ошибка выходит


EESeregin

EESeregin, вы попробовали это выполнить? И не получили "SQL Error (1066): Not unique table/alias: 'gorod'"?Внимательно ещё раз прочитайте мой пример, особое внимание - на цифры после букв "d".


EESeregin

tanglir,Спасибо, все работает.SELECT sp_uchen.fam, sp_uchen.nam, sp_uchen.punct_prop, sp_uchen.punct_zh, city2.gorod_nam, city1.gorod_namFROM sp_uchenLEFT JOIN gorod AS city2 ON sp_uchen.punct_prop = city2.gor_idLEFT JOIN gorod AS city1 ON sp_uchen.punct_zh = city1.gor_idLIMIT 0 , 30


EESeregin

EESeregin, на всякий случай: лимит без ордербай - рулетка.