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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
3-1254997267
vturkevich
2009-10-08 14:21
2011.04.03
Запись данных в подченненую табл SQL-запросом


2-1294380604
mefodiy
2011-01-07 09:10
2011.04.03
Разница в представлении данных MySQL.User в D7 и D2010


11-1213908689
Dy1
2008-06-20 00:51
2011.04.03
ToolBar


15-1292678300
Disciple
2010-12-18 16:18
2011.04.03
Бряк на CreateWindow


2-1294227904
Curse
2011-01-05 14:45
2011.04.03
Не работает упреждающее объявление класса