КАРТА САЙТА
Sibnet.ru
Sibnet.ru

Sibnet.ru — это информационно-развлекательный интернет-проект, ориентированный на широкий круг Сибирского региона.
По данным Rambler Top100, Sibnet.ru является самым популярным порталом в Сибири.

Контакты:
АО "Ринет"
ОГРН 1025402475856
г. Новосибирск, ул. Якушева, д. 37, 3 этаж
отдел рекламы:
(383) 347-10-50, 347-06-78, 347-22-11, 347-03-97

Редакция: (383) 347-86-84

Техподдержка:
help.sibnet.ru
Авторизируйтесь,
чтобы продолжить
Некоторые функции доступны только зарегистрированным пользователям
Неправильный логин или пароль

Внимание! Теперь для входа на форум необходимо вводить единый пароль регистрации сервисов sibnet.ru!

Здравствуйте, гость ( Вход | Регистрация )



 
Ответить в эту темуОткрыть новую тему
> Помогите с Sql запросом, HELP
s2s2
сообщение 8.3.2013, 12:31
Сообщение #1


Поддерживает разговор
Group Icon


Группа: Sibnet-club
Сообщений: 183
Регистрация: 19.1.2009
Пользователь №: 75 921



Репутация:   7  


Всем добрый день. Помогите кто нибудь с sql запросом. Есть 7 таблиц. ts, kontroller, dyt, drt, setupdrt, setupdyt, setupkontroller. Нужно написать sql запрос чтобы выбрать данные с колонок ts.marka, ts.gosnumber, kontroller.snkontroller, dyt.sndyt, drt.sndrt.


Эскизы прикрепленных изображений
Прикрепленное изображение
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
shouhei
сообщение 8.3.2013, 12:49
Сообщение #2


Himmelsstürmer
Group Icon


Группа: Events and facts club
Сообщений: 33 866
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739



Репутация:   1421  


Так и пиши. Ни капли не возражаю. SELECT нужные поля FROM нужные таблицы. Я понимаю, если бы у тебя ограничения какие-то были по выборке, а тут то в чём фишка?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
s2s2
сообщение 8.3.2013, 16:49
Сообщение #3


Поддерживает разговор
Group Icon


Группа: Sibnet-club
Сообщений: 183
Регистрация: 19.1.2009
Пользователь №: 75 921



Репутация:   7  


Цитата(shouhei @ 8.3.2013, 11:49) *

Так и пиши. Ни капли не возражаю. SELECT нужные поля FROM нужные таблицы. Я понимаю, если бы у тебя ограничения какие-то были по выборке, а тут то в чём фишка?

Если я вот так пишу то все нормально работает
Код
SELECT ts.id, ts.marka, ts.gosnumber, kontroller.SnKontroller FROM ts, kontroller, setupkontroller WHERE (ts.id = setupkontroller.idts AND kontroller.id =  setupkontroller.idKontrpller AND setupkontroller.Removed<>'TRUE')

Но нужно еще вывести колонки dyt.sndyt и drt.sndrt
Пишем так:
Код
SELECT ts.id, ts.marka, ts.gosnumber, kontroller.SnKontroller dyt.sndyt, drt.sndrt FROM ts, kontroller, setupkontroller, setupdut, setupdrt, dyt, drt WHERE (ts.id = setupkontroller.idts AND kontroller.id =  setupkontroller.idKontrpller AND setupkontroller.Removed<>'TRUE' AND ts.id = setupdrt.idts AND drt.id = setupdrt.iddrt AND ts.id = setupdyt.idts AND dyt.id = setupdyt.iddyt)

То тогда результата равен 0 строк

Сообщение отредактировал s2s2 - 8.3.2013, 16:50
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
artygrand
сообщение 8.3.2013, 20:09
Сообщение #4


1400-кун
Group Icon


Группа: Модераторы
Сообщений: 7 687
Регистрация: 23.11.2008
Из: Новосибирска
Пользователь №: 62 681



В код не вчитывался, но может тебе left join поможет?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
s2s2
сообщение 8.3.2013, 20:36
Сообщение #5


Поддерживает разговор
Group Icon


Группа: Sibnet-club
Сообщений: 183
Регистрация: 19.1.2009
Пользователь №: 75 921



Репутация:   7  


Цитата(artygrand @ 8.3.2013, 19:09) *

В код не вчитывался, но может тебе left join поможет?

Я про left join думал, но я не могу понять его синтаксис)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
artygrand
сообщение 8.3.2013, 21:20
Сообщение #6


1400-кун
Group Icon


Группа: Модераторы
Сообщений: 7 687
Регистрация: 23.11.2008
Из: Новосибирска
Пользователь №: 62 681



э, неужели даже это http://ru.wikipedia.org/wiki/Join_(SQL) не помогает?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
s2s2
сообщение 8.3.2013, 21:27
Сообщение #7


Поддерживает разговор
Group Icon


Группа: Sibnet-club
Сообщений: 183
Регистрация: 19.1.2009
Пользователь №: 75 921



Репутация:   7  


Цитата(artygrand @ 8.3.2013, 20:20) *

э, неужели даже это http://ru.wikipedia.org/wiki/Join_(SQL) не помогает?

Я не правильно написал). Не то что не могу понять синтаксис. Не могу просто сообразить как мне его написать чтоб сделать выборку по 7 таблицам ненаписанные выше
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
shouhei
сообщение 9.3.2013, 11:24
Сообщение #8


Himmelsstürmer
Group Icon


Группа: Events and facts club
Сообщений: 33 866
Регистрация: 2.4.2008
Из: Caught somewhere in time
Пользователь №: 27 739



Репутация:   1421  


Цитата(s2s2 @ 8.3.2013, 16:49) *

Пишем так:
Код
SELECT ts.id, ts.marka, ts.gosnumber, kontroller.SnKontroller dyt.sndyt, drt.sndrt FROM ts, kontroller, setupkontroller, setupdut, setupdrt, dyt, drt WHERE (ts.id = setupkontroller.idts AND kontroller.id =  setupkontroller.idKontrpller AND setupkontroller.Removed<>'TRUE' AND ts.id = setupdrt.idts AND drt.id = setupdrt.iddrt AND ts.id = setupdyt.idts AND dyt.id = setupdyt.iddyt)

То тогда результата равен 0 строк


А вот теперь внимательно смотрим на твою схему таблиц. И выписываем все условия отбора как надо. Например, с JOIN:
SQL
SELECT ts.id, ts.marka, ts.gosnumber, kontroller.SnKontroller dyt.sndyt, drt.sndrt
FROM ts LEFT JOIN setupkontroller ON ts.id=setupkontroller.idts LEFT JOIN kontroller ON setupkontroller.idKontroller=kontroller.id LEFT JOIN setupdyt ON ts.id=setupdyt.idts LEFT JOIN dyt on setupdyt.iddyt=dyt.id LEFT JOIN setupdrt ON ts.id=setupdrt.idts LEFT JOIN drt ON setupdrt.iddrt=drt.id
WHERE setupkontroller.Removed<>'TRUE'

Кстати, у тебя тут столько опечаток было, что я не удивляюсь, почему запрос не работает. Или ты всё набирал заново, не копипастом?

Ещё, если у тебя СУБД Oracle, то все эти LEFT JOIN бесполезны, так как он до сих пор сперва делает INNER JOIN а потом его уже ограничивает по условиям LEFT JOIN, то есть их без какой-либо потери производительности можно убрать в WHERE, как у тебя и было. С MySQL, раз они сейчас принадлежат тому же ораклу — вполне возможно то же самое, тут я не в курсе ситуации.

Ну и уже в третьих: ты точно уверен, что у тебя таблицы все заполнены и результат запроса будет не пустой?

Попробуй раздробить его, то есть подключай таблицы по очереди. По две. Я про setupdyt и dyt, setupdrt и drt. А ещё SnDYT ты можешь добыть через таблицу Tarirovka, точно таким же образом.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
s2s2
сообщение 11.3.2013, 11:54
Сообщение #9


Поддерживает разговор
Group Icon


Группа: Sibnet-club
Сообщений: 183
Регистрация: 19.1.2009
Пользователь №: 75 921



Репутация:   7  


Цитата
А вот теперь внимательно смотрим на твою схему таблиц. И выписываем все условия отбора как надо. Например, с JOIN:
SQL
SELECT ts.id, ts.marka, ts.gosnumber, kontroller.SnKontroller dyt.sndyt, drt.sndrt
FROM ts LEFT JOIN setupkontroller ON ts.id=setupkontroller.idts LEFT JOIN kontroller ON setupkontroller.idKontroller=kontroller.id LEFT JOIN setupdyt ON ts.id=setupdyt.idts LEFT JOIN dyt on setupdyt.iddyt=dyt.id LEFT JOIN setupdrt ON ts.id=setupdrt.idts LEFT JOIN drt ON setupdrt.iddrt=drt.id
WHERE setupkontroller.Removed<>'TRUE'

Спасибо огромное. Не представляешь как ты сильно мне помог

Цитата(shouhei @ 9.3.2013, 10:24) *

Кстати, у тебя тут столько опечаток было, что я не удивляюсь, почему запрос не работает. Или ты всё набирал заново, не копипастом?

Да ты прав я все заново набирал без копипаста biggrin.gif
Цитата
Ещё, если у тебя СУБД Oracle, то все эти LEFT JOIN бесполезны, так как он до сих пор сперва делает INNER JOIN а потом его уже ограничивает по условиям LEFT JOIN, то есть их без какой-либо потери производительности можно убрать в WHERE, как у тебя и было. С MySQL, раз они сейчас принадлежат тому же ораклу — вполне возможно то же самое, тут я не в курсе ситуации.

К счастью не Oracle.) Я пишу диплом на php и база у меня на MySQL.

Цитата
Ну и уже в третьих: ты точно уверен, что у тебя таблицы все заполнены и результат запроса будет не пустой?

Я это проверил в первую очередь))).

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. просматривают этот форум (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 28.3.2024, 17:06
Редакция: (383) 347-86-84

Техподдержка:
help.sibnet.ru
Размещение рекламы:
тел: (383) 347-06-78, 347-10-50

Правила использования материалов