SQL запрос

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

SQL запрос

Сообщение burik » 02.08.2007 (Чт) 16:28

Здравствуйте, подскажите как сформулировать SQL запрос.
Вообщем есть две таблицы. В первой лежит список документов и информация одинаковая для всех(№,дата и т. п.). Во второй - список параметров. Нужно создать SQL запрос выбирающий запись из првой таблицы + количество записей, к ней относящихся, из второй.
Для подключения юзаю Data Environment.

P. S. Кстати, вопрос на засыпку:
В Access'е, при открытии таблицы, связанной с другой, слева отображаються "плюсики", при щелчке по которым открывается sub-таблица с записями относящимися к той, около которой был "плюсик". :shock: Можно ли организовать подобное в своей проге?
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.08.2007 (Чт) 16:48

burik
Названия полей и формат данных в полях в студию.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 02.08.2007 (Чт) 16:55

SELECT * FROM docs LEFT JOIN params ON docs.ID=params.DOC_ID
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.08.2007 (Чт) 16:59

Sebas
Неправильно. Перечитай вопрос.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 02.08.2007 (Чт) 17:06

Названия полей:
Таблица "документы"
-Номер (числовой=>целое) (ключ)
-Заголовок (строковый) (25 символов)
-Дата (строковый) (10 символов)


Таблица "параметры"
-Номер (числовой=>целое) (ключ)
-Параметр (строковый) (25 символов)
-Значение (строковый) (25 символов)


P. S. в таблице "параметры" поле "Номер" - это номер документа, к которому он привязан
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 02.08.2007 (Чт) 17:12

Наверное это:
Код: Выделить всё
SELECT Номер, count(*)
FROM документы AS d INNER JOIN параметры AS p ON d.Номер=p.Номер
GROUP BY d.Номер
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.08.2007 (Чт) 17:18

Угу. Похоже на правду.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 02.08.2007 (Чт) 17:41

Не работает
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.08.2007 (Чт) 19:52

Код: Выделить всё
SELECT d.Номер, d.Заголовок, d.Дата, count(*)
FROM документы AS d LEFT JOIN параметры AS p ON d.Номер=p.Номер
GROUP BY d.Номер, d.Заголовок, d.Дата
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 02.08.2007 (Чт) 22:04

GSerg, это вроде работает, спасибо!

Добавлено позже:
Хотя не совсем: этот запрос выдает 1 если там ноль.. а так работает.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 02.08.2007 (Чт) 22:15

Фу, ноконец-то получилось

Код: Выделить всё

SELECT Номер, Заголовок, Дата, (SELECT Count(*) FROM Параметры WHERE Номер=Документы.Номер) AS Параметров
FROM Документы
Последний раз редактировалось burik 02.08.2007 (Чт) 22:23, всего редактировалось 1 раз.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.08.2007 (Чт) 22:18

Нда...

Юзать теги [SQL] которых в природе нет - это мощно.
Закрывать из тегом [/code] (непонятно зачем) - это мощно в двойне.
Отказаться от группироки и юзать подзапрос - это хм... вобщем, непонятно, зачем это нужно.

Фраза "запрос выдает 1 если там ноль.. " также мне непонятна.



Добавлено позже:
██ - автор успел подправить свой пост. Комментарии потеряли актуальность.

██ - кажется понятно, что было нужно автору. Получать 0, даже если документу из второй таблицы нифига не соответствует. Я угадал?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 02.08.2007 (Чт) 22:33

Хакер писал(а):Юзать теги [SQL] которых в природе нет - это мощно.
Закрывать из тегом [/code] (непонятно зачем) - это мощно в двойне.

Да, тут я намудри. Просто вначале хотел выделить SQL-код тэгом CODE, но потом вспомнил, что есть тэг для выделения SQL, но на форме быстрого ответа я этой кнопки не наблюдаю, вот и подумал, что это быдет тэг SQL. Однако увидев результат, я сразу побежал править.. :D

Хакер писал(а):Отказаться от группироки и юзать подзапрос - это хм... вобщем, непонятно, зачем это нужно.

Юзать подзапрос это для того, что бы получить правильный результат. Потому как другого правильно работающего запроса я не заметил.

Хакер писал(а):Фраза "запрос выдает 1 если там ноль.. " также мне непонятна.

Поясняю:
При выводе результатов этого запроса в том месте, где должен отобразиться результат функции Count, в записях к которым нет параметров отображается 1(хотя должен стоять 0). В остальных же записях все работает нормально.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 02.08.2007 (Чт) 22:37

Когда я начал писать свое предыдущее сообщение, ообщения находящегося выше еще не было.
Хакер писал(а):кажется понятно, что было нужно автору. Получать 0, даже если документу из второй таблицы нифига не соответствует. Я угадал?


Вот именно.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 03.08.2007 (Пт) 8:13

Код: Выделить всё
Select
   Docum.Nomer,
   Docum.[Desc],
   Docum.[Date],
   Count(Param.Nomer)
From
      Docum
Left Join  Param On Param.Nomer = Docum.Nomer
Group By
   Docum.Nomer, Docum.[Desc], Docum.[Date]
I Have Nine Lives You Have One Only
THINK!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.08.2007 (Пт) 12:31

Docum.Nomer

Сильно :).
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot], Yandex-бот и гости: 82

    TopList