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

Вниз

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

 
Unknown_user   (2011-01-05 13:55) [0]

Знатоки SQL, подскажите. Вроде задача несложная, но что-то не дается никак.

Нужно сформировать запрос для получения информации о заказе (номер заказа) и данные клиента (имя, адрес). Адрес клиента включает ссылки на таблицы settlements и streets. Но улица может не задаваться - ссылка customers.streetid может быть null.

Пишу такой запрос:


SELECT orders.number, customers.name, settlements.name, streets.name

FROM orders, customers, settlements, streets

WHERE orders.customerid=customers.id AND customers.settlementid=settlements.id AND
customers.streetid=streets.id;


Если customers.streetid = null для всех клиентов, запрос возвращает пустой результат. Мне же нужно вывести информацию по всем заказам независимо от того задана ли ссылка на улицу в таблице заказчиков или нет.

Знаю, про LEFT JOIN. Но эта команда задает связи только между 2-мя таблицами. У меня таблиц больше, LEFT JOIN не работает.

Где я туплю?


 
Вариант   (2011-01-05 14:25) [1]


> Unknown_user   (05.01.11 13:55)


И в твоем запросе нужен только один LEFT JOIN  между
customers и streets


 
sniknik ©   (2011-01-05 14:36) [2]

> Где я туплю?
тут
> LEFT JOIN не работает.


 
Unknown_user   (2011-01-05 15:08) [3]

>И в твоем запросе нужен только один LEFT JOIN  между
customers и streets

Не понимаю как, ткните носом. Вот скрипт, выводящий всех клиентов с названием улицы, или пустой строкой если customers.streetid=null

SELECT reg_customers.name, streets.name
FROM customers
LEFT JOIN streets
ON customers.streetid=streets.id


Но мне нужно вывести список заказов из таблицы orders и для каждого заказа в одной строке фамилию заказчика, его город, его улицу.

LEFT JOIN не разрешает задавать больше одной таблицы в секции FROM и секции JOIN.

Это должен быть вложенный SQL запрос? Не понимаю, объясните.


 
12 ©   (2011-01-05 15:12) [4]

>
> SELECT reg_customers.name, streets.name
> FROM customers
> LEFT JOIN streets ON customers.streetid=streets.id
LEFT JOIN QQQQ ON QQQ.WWWWid=customers.WWWWid
where
 QQQ.WWWWid is not null


 
Palladin ©   (2011-01-05 15:13) [5]

http://www.job-blog.bullgare.ru/tag/left-join/


 
Unknown_user   (2011-01-05 15:52) [6]

>LEFT JOIN QQQQ ON QQQ.WWWWid=customers.WWWWid
where
QQQ.WWWWid is not null

А можно полностью и с раскодированными именами таблиц. Ключевое поле у меня в каждой таблице называется id. Вот, что мне нужно получить.

SELECT orders.number, customers.name, settlements.name, streets.name

Имеются 4 таблицы. Вывести нужно столько строк, сколько записей в таблице orders.

orders имеет поле orders.customerid - ссылка на customers.id.

customers имеет поле customers.settlementid - ссылка на settlements.id

и также поле customers.streetid - ссылка на streets.id

customers.streetid может быть null

У меня так и не получилось использовать LEFT JOIN. pgAdmin3 выдает ошибку

>There is an entry for table "customers", but it cannot be referenced from this part of the query.

>Palladin

спасибо за ссылку, но своего случая я в примерах не нашел.


 
sniknik ©   (2011-01-05 16:10) [7]

> А можно полностью и с раскодированными именами таблиц.
это ТЗ, под копипаст? сумма не озвучена.

> но своего случая я в примерах не нашел.
описание "как работает" не "кормит одноразово" оно "учит ловить рыбу".


 
Unknown_user   (2011-01-05 17:20) [8]

>sniknik

Давайте не будем алчными. delphimaster.ru всегда был хорошим местом взаимопомощи. Надеюсь, таким и останется.

Мой случай настолько сложный, что за решение нужно платить деньги?


 
Palladin ©   (2011-01-05 17:21) [9]

проблема в том что - несложный, вот за это уже надо


 
sniknik ©   (2011-01-05 18:00) [10]

> Мой случай настолько сложный, что за решение нужно платить деньги?
настолько простой, что уже не взаимопомощь, а репетиторство.


 
sniknik ©   (2011-01-05 18:04) [11]

+
немного ошибся, запутали меня... "взаимопомощь" это когда "взаимо" т.е. "ты мне, я тебе".
покажи где ты мне помогал.


 
Unknown_user   (2011-01-05 18:23) [12]

Почему-то мне кажется, вы не поняли моей задачи. И потому она кажется вам простой и недостойной решения. У меня связи orders-customers-settlements и orders-customers-streets. Это не обычная ситуация для JOIN, где участвуют 2 таблицы.

>LEFT JOIN QQQQ ON QQQ.WWWWid=customers.WWWWid
where
QQQ.WWWWid is not null

В этом примере связь между 2-мя таблицами. Как ее организовать я понимаю.

Запрос

SELECT orders.number, customers.name, settlements.name, streets.name

FROM orders, customers, settlements, streets

WHERE orders.customerid=customers.id AND customers.settlementid=settlements.id AND
customers.streetid=streets.id;


который я сейчас использую неявно вызывает JOIN. Но он не работает если customers.streetid=null, тогда возвращается пустой набор данных.

Не нашел способа перечислить в JOIN все 4 (важный момент - это цифра 4) таблицы, значения из которых мне нужно получить.


 
12 ©   (2011-01-05 18:36) [13]

select
from
таблица1 as t1
left join таблица2 as t2 on t1.id=t2.id
left join таблица3 as t3 on t3.id=t2.id
..
left join таблицаN as tN on tN.id=t(N-1).id
where
tК.id is not null


 
Anatoly Podgoretsky ©   (2011-01-05 18:38) [14]

Не можешь в одном соединение, сделай несколько.


 
Unknown_user   (2011-01-05 19:02) [15]

>12

Большое спасибо. Про вложенные JOIN я не знал. Вот решение, если кто-то не понял.

SELECT orders.number, customers.name, settlements.name, streets.name

FROM orders

LEFT JOIN customers ON orders.customerid=customers.id
LEFT JOIN settlements ON customers.settlementid=settlements.id
LEFT JOIN streets ON customers.streetid=streets.id


12, спасибо еще раз.


 
12 ©   (2011-01-05 20:22) [16]

не за что
это настолько элементарно, что никто и отвечать просто не захотел
это азбука.


> Вот решение, если кто-то не понял.

михалкову за перепечатку азбуки платить придется :)


 
Anatoly Podgoretsky ©   (2011-01-05 21:13) [17]

> 12  (05.01.2011 20:22:16)  [16]

Как это он про учебники и книги забыл.


 
Unknown_user   (2011-01-05 21:19) [18]

>12

Я базами данных никогда никогда не занимался, хотя и использую делфи много лет. Моя специализация веб-картография и трехмерное моделирование, вот такие карты делаем:

http://www.vin3d.net

А SQL я только полмесяца изучаю. Дали задание разработать структуру БД и приложение к ней.

А этот сайт мне мне неоднократно помогал, благодаря таким специалистам как Вы. Выражаю им благодарность. Мир все таки не без добрых людей :)


 
Unknown_user   (2011-01-05 21:21) [19]

>Как это он про учебники и книги забыл.

Не те учебники видать читаю.

http://www.w3schools.com/sql/sql_join_left.asp

Тут слишком упрощенный подход.


 
12 ©   (2011-01-05 21:29) [20]

http://www.sql.ru/ - наше все :)


 
MsGuns ©   (2011-01-06 11:49) [21]

>Unknown_user   (05.01.11 21:19) [18]
>вот такие карты делаем:

>http://www.vin3d.net

Глючит при масштабировании


 
Unknown_user   (2011-01-06 16:05) [22]

>http://www.sql.ru/ - наше все :)

Спасибо, буду изучать дальше

>Глючит при масштабировании

Как глючит? в 2D или 3D?



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

Форум: "Начинающим";
Текущий архив: 2011.04.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.003 c
15-1292771326
НЕКТО
2010-12-19 18:08
2011.04.03
Символ пробела в регулярном выражении


6-1236190366
DimDim
2009-03-04 21:12
2011.04.03
Indy10 idFTP как разделить файлы и каталоги?


15-1292794192
Юрий
2010-12-20 00:29
2011.04.03
С днем рождения ! 20 декабря 2010 понедельник


6-1236188615
dron1990
2009-03-04 20:43
2011.04.03
технология DCOM


15-1292399951
Jeer
2010-12-15 10:59
2011.04.03
Внедрение ГЛОНАСС полным ходом..





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский