Форум: "Начинающим";
Текущий архив: 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=nullSELECT 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