Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Язык SQL, начало

40K
24 ноября 2011 года
NikiFoR112
13 / / 11.12.2008
Добрый день! Если кто скажет, что вопрос примитивный, спорить не буду, тока познакомился с SQL. Суть в следующем: СУБД в MS Access 2003, 2 таблицы (Таблица1 - "ФИО|Конференция|Оценка", Таблица4 - "ФИО|ВУЗ"). Я понял, что количество записей с определенным ФИО из Таблицы1 достается так:

 
Код:
SELECT COUNT(Таблица1.Код)
              FROM Таблица1
              WHERE Таблица1.ФИО = "Сидоров"


При этом, если я использую такой запрос в качестве вложенного:

 
Код:
SELECT Таблица1.ФИО, Таблица1.Конференция, Таблица4.ВУЗ
FROM Таблица1, Таблица4
WHERE (((Таблица1.ФИО)=[Таблица4].[ФИО]) AND
             (((SELECT COUNT(Таблица1.Код)
              FROM Таблица1
              WHERE Таблица1.ФИО = "Сидоров"))=2));
,

то сравнения с числом 2 не происходит (или происходит неверно)

И еще вопрос, если мне необходимо узнать количество записей по всем ФИО из Таблицы1 (см. 1-й запрос), можно ли организовать что-то наподобие цикла, или я не правильно понимаю что-то...
Спасибо.
23K
24 ноября 2011 года
rafaelkyrdan
123 / / 03.05.2011
[QUOTE=NikiFoR112;361743 Я понял, что количество записей с определенным ФИО из Таблицы1 достается так:

 
Код:
SELECT COUNT(Таблица1.Код)
              FROM Таблица1
              WHERE Таблица1.ФИО = "Сидоров"


При этом, если я использую такой запрос в качестве вложенного:

 
Код:
SELECT Таблица1.ФИО, Таблица1.Конференция, Таблица4.ВУЗ
FROM Таблица1, Таблица4
WHERE (((Таблица1.ФИО)=[Таблица4].[ФИО]) AND
             (((SELECT COUNT(Таблица1.Код)
              FROM Таблица1
              WHERE Таблица1.ФИО = "Сидоров"))=2));
,

то сравнения с числом 2 не происходит (или происходит неверно)

.[/QUOTE]
C Access незнаком но в любом случае в инструкции WHERE должно быть условие поиска вопрос с чем с сравниваеться вложенный запрос?
40K
24 ноября 2011 года
NikiFoR112
13 / / 11.12.2008
Цитата: rafaelkyrdan
C Access незнаком но в любом случае в инструкции WHERE должно быть условие поиска вопрос с чем с сравниваеться вложенный запрос?



Вложенный запрос считает кол-во записей с ФИО !"Сидоров" и сравнивается с числом 2

49K
24 ноября 2011 года
vorobej
129 / / 17.11.2011
Млин тут таблицы на кирилице.. аж мозг кипит когда читаешь...

В общем "кажется, что!" GROUP BY не хватает... только вот куда его пихнуть... Смотря что тебе нужно, конференции? Смею предположить:

SELECT Таблица1.ФИО, Таблица1.Конференция, Таблица4.ВУЗ

FROM Таблица1 LEFT JOIN Таблица4 ON ( Таблица1.ФИО=Таблица4.ФИО )

WHERE (SELECT COUNT(Таблица1.Код) FROM Таблица1 WHERE Таблица1.ФИО = "Сидоров") =2

GROUP BY Таблица1.Конференция
;
10
24 ноября 2011 года
Freeman
3.2K / / 06.03.2004
Если нужно выбрать только те ФИО, которые участвовали в конференциях два раза, условие count(Таблица1.Код) = 2 записывается в предложение having после group by.
49K
24 ноября 2011 года
vorobej
129 / / 17.11.2011
Цитата:
Если нужно выбрать только те ФИО, которые участвовали в конференциях два раза, условие count(Таблица1.Код) = 2 записывается в предложение having после group by.



Вот, точно, гениально! HAVING - все никак не мог вспомнить, чего не хватает =)

40K
25 ноября 2011 года
NikiFoR112
13 / / 11.12.2008
Спасибо всем, что соориентировали куда смотреть!

а в чем проблема вэтом случае:
Цитата:
Млин тут таблицы на кирилице.. аж мозг кипит когда читаешь...


какие еще могут быть таблицы? в бинарном виде (извините, если чушь сказал) ?

277
25 ноября 2011 года
arrjj
1.7K / / 26.01.2011
Как правило названия таблиц и столбцов идут на лаитнском алфавите (хуже транслитом - лучше в адекватном переводе). Это делается для того чтоб не было проблем с кодировкой в однобайтовых системах кодировки.
40K
25 ноября 2011 года
NikiFoR112
13 / / 11.12.2008
Спасибо, учту.
40K
27 ноября 2011 года
NikiFoR112
13 / / 11.12.2008
не понимаю, в таком коде
 
Код:
SELECT Data1.FIO, Data1.Konf, Data4.VUZ
FROM Data1, Data4
WHERE Data1.FIO=Data4.FIO
GROUP BY Data1.FIO
HAVING count(Data1.Valu2) = 2;

что-то с синтаксисом не верно, или я в принципе что-то не правильно пишу, но появляется сообщение "Попытка выполнить запрос, который не включает указанное выражене 'Konf', как часть статичтической функции или группы".
40K
27 ноября 2011 года
NikiFoR112
13 / / 11.12.2008
обратил внимание, что если в первой строке оставить только Data1.FIO, то запрос работает, причем верно, но мне необходимо, чтобы остальные поля тоже выводились..
385
28 ноября 2011 года
SomewherSomehow
477 / / 25.07.2004
В условии группировки должны участвовать все поля, перечисленные в селекте, либо, по полям не участвующим в группировке, должна быть агрегация.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог