Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Вниз

Связи посредством 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
3-10585
Алексей Петухов
2003-08-14 13:59
2003.09.04
Вычисляемое поле в BDGrid


1-10727
Vorobyev Sergey
2003-08-20 09:21
2003.09.04
Можно ли использовать .OBJ файл,созданный в D6(dcc32.exe) в CB5 ?


1-10750
Эл
2003-08-24 19:26
2003.09.04
Создание своих визуальных компонентов


1-10772
IntLex
2003-08-23 08:47
2003.09.04
Хитрая проблема (или куда девались пункты меню)


3-10644
Вадим_ака
2003-08-11 16:19
2003.09.04
Преобразование TXT в BDF.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский