Главная страница
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.015 c
14-10942
Dimedrol
2003-08-16 16:52
2003.09.04
Как PDF конвертнуть в TIFF ?


14-10928
peps
2003-08-17 04:38
2003.09.04
компонент


1-10731
dvp1
2003-08-20 09:07
2003.09.04
Как отсортировать строки динамически при нажатии на ColumnTab без


3-10634
Avreliy
2003-08-12 18:13
2003.09.04
Левое внешнее объединение 2х хранимых процедур


7-10986
Дмитрий777
2003-06-24 13:37
2003.09.04
Передавать файлы по частям