Форум: "Базы";
Текущий архив: 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