Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

Связи посредством SQL   Найти похожие ветки 

 
Denkop ©   (2003-08-14 12:46) [0]

Есть такой запрос:

SELECT * FROM MAINTABLE T1
JOIN ORG_GROUP T2 ON T1.ID_GROUP=T2.ID
JOIN REG_GROUP T3 ON T1.ID_REG=T3.ID
JOIN TOWN_GROUP T4 ON T1.ID_TOWN=T4.ID
WHERE T1.ID_TOWN=13
ORDER BY T3.NAME, T4.NAME, T2.NAME, T1.NAME

Ничего не выбирает (т.е. в результат=0 записей) и даже так не хочет:

SELECT * FROM MAINTABLE T1
JOIN ORG_GROUP T2 ON T1.ID_GROUP=T2.ID
JOIN REG_GROUP T3 ON T1.ID_REG=T3.ID
JOIN TOWN_GROUP T4 ON T1.ID_TOWN=T4.ID
ORDER BY T3.NAME, T4.NAME, T2.NAME, T1.NAME

Когда убираю все джойны, работает нормально, но я лишаюсь сортировки, как это ни печально... Т.е. запрос выглядит примено так:

SELECT * FROM MAINTABLE T1
WHERE T1.ID_TOWN=13

Подскажите, что я неправильно делаю, иначе умру с горя

З.Ы. Попутный вопрос, могу ли написать так:

SELECT * FROM MAINTABLE T1
JOIN ORG_GROUP T2 ON T1.ID_GROUP=T2.ID
JOIN REG_GROUP T3 ON T1.ID_REG=T3.ID
JOIN TOWN_GROUP T4 ON T1.ID_TOWN=T4.ID
WHERE T4.NAME="Rostov"
ORDER BY T3.NAME, T4.NAME, T2.NAME, T1.NAME


 
Соловьев ©   (2003-08-14 12:54) [1]


> Когда убираю все джойны, работает нормально, но я лишаюсь
> сортировки, как это ни печально...

причем тут сортировка?

> SELECT * FROM MAINTABLE T1
> JOIN ORG_GROUP T2 ON T1.ID_GROUP=T2.ID
> JOIN REG_GROUP T3 ON T1.ID_REG=T3.ID
> JOIN TOWN_GROUP T4 ON T1.ID_TOWN=T4.ID
> WHERE T1.ID_TOWN=13
> ORDER BY T3.NAME, T4.NAME, T2.NAME, T1.NAME

а зачем тут t1.td_town=13 - у тебя же поэтому поля связь?

> .Ы. Попутный вопрос, могу ли написать так:

можно


 
Denkop ©   (2003-08-14 12:58) [2]


> причем тут сортировка?

ORDER BY T3.NAME, T4.NAME, T2.NAME, T1.NAME


> а зачем тут t1.td_town=13 - у тебя же поэтому поля связь?

А почему я не могу поискать по полю по которому связываю?


 
Denkop ©   (2003-08-14 13:02) [3]

SELECT * FROM MAINTABLE T1
JOIN ORG_GROUP T2 ON T1.ID_GROUP=T2.ID
JOIN REG_GROUP T3 ON T1.ID_REG=T3.ID
JOIN TOWN_GROUP T4 ON T1.ID_TOWN=T4.ID
WHERE T4.NAME="Rostov"
ORDER BY T3.NAME, T4.NAME, T2.NAME, T1.NAME

Получаю пустой набор...


 
Zacho ©   (2003-08-14 13:03) [4]

Запрос ничего не возвращает, потому что условие в каком-либо join"е не выполняется. Попытаюсь догадаться: может тебе нужен LEFT JOIN ?


 
ЮЮ ©   (2003-08-14 13:04) [5]

Если хоть одно из значений ID_GROUP,ID_REG или ID_TOWN записи окажется NULL, то эта запись не будет возвращена запросом.
Используй LEFT JOIN вместо JOIN


 
Denkop ©   (2003-08-14 13:41) [6]

All> Благодарен

Записей с нулами у меня вроде нет. А вот left join сработало.
А чем собственно отличается JOIN от LEFT JOIN, RIGHT JOIN и INNER JOIN?


 
АлексейК   (2003-08-14 13:44) [7]

А чем собственно отличается JOIN от LEFT JOIN, RIGHT JOIN и INNER JOIN?
Условием отбора записей.


 
Denkop ©   (2003-08-14 13:46) [8]

А можно поподробнее. В книге я ничего не разобрал, т.к. либо книга у меня кривая, либо кривоваты у меня мозги!


 
Zacho ©   (2003-08-14 13:51) [9]


> Denkop © (14.08.03 13:41) [6]

JOIN (он же INNER JOIN) - если условие соединения не выполняется, то запись не возвращается запросом. Т.е. если есть запрос
SELECT T1.F1,T2.F2
FROM TABLE_1 T1
JOIN TABLE_2 T2 ON T1.ID=T2.ID
и в таблице TABLE_2 не нашлось записи с ID, равном ID какой-либо записи из таблицы T1, то эту запись запрос не вернет.
В случае LEFT JOIN (он же LEFT OUTER JOIN ) запрос вернет запись, но в поле T2.F2 будет NULL
LEFT от RIGHT отличается тем, как связываются таблицы - левая с правой или правая с левой.
P.S. Очень рекомендую почитать какую-либо книжку с основами SQL


 
DenKop ©   (2003-08-14 23:26) [10]

Возьму на заметку, спасибо за пояснение



Страницы: 1 вся ветка

Текущий архив: 2003.09.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
3-10565
nortsov
2003-08-14 20:43
2003.09.04
fb и добавление записей


1-10775
pvb87
2003-08-23 19:03
2003.09.04
Linux


1-10809
MikeB
2003-08-21 12:13
2003.09.04
модальные окна


1-10807
BuTyc
2003-08-22 06:43
2003.09.04
Drag&Drop не цепляясь за шапку окна.


6-10864
maxic
2003-06-30 16:33
2003.09.04
Вызов Outlook с текстом письма