Перейти из форума на сайт.Реклама на Ru.Board


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Открыть новую тему     Написать ответ в эту тему

MagistrAnatol



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
есть две базы - мастер  
CREATE TABLE OtpyckMaster (
  FIO VARCHAR(70),
  Zex VARCHAR(50),
  Kategoriya VARCHAR(40),
  Pocada VARCHAR(40),
  Oklad FLOAT,
  TabN INTEGER,
  Ymobu VARCHAR(10),
  DniOcn INTEGER,
  DniDop INTEGER,
  DniSkid INTEGER,
  DniMateri INTEGER,
  DniInshi INTEGER,
  DniAll INTEGER,
  DataVuxoda DATE,
  Id AUTOINC,  
  INDEX FIO_ASC (FIO),  
  INDEX FIO_DESC (FIO DESC)
);
и детал
 
CREATE TABLE OtpyckFakt (
  God INTEGER,
  DataNOcn DATE,
  DataKOcn DATE,
  DniOcn INTEGER,
  DniDop INTEGER,
  DniSkid INTEGER,
  DniMateri INTEGER,
  DniInshi INTEGER,
  DniAll INTEGER,
  DataNAll DATE,
  DataKAll DATE,
  MasterId INTEGER,
  Id AUTOINC
);
ето базы для работы с отпусками - задача такая - надо выбрать всех сотрудников
которые в ,к примеру, 2006 году,поле OtpyckFakt .God,или за период, вообще не были в отпуску,или в которых кол-во дней фактического отпуска OtpyckFakt .DniAll меньше необходимых OtpyckMaster .DniAll.
Я состряпал такой запрос  
SELECT OtpyckMaster.FIO,OtpyckFakt.God,OtpyckMaster.DniAll DniM,
OtpyckFakt.DniAll DniF,OtpyckMaster.DniAll-OtpyckFakt.DniAll DniR
FROM OtpyckMaster,OtpyckFakt
WHERE (OtpyckFakt.God NOT IN(2007) OR DniR>0) AND (OtpyckFakt.MasterId=OtpyckMaster.Id)
ORDER BY FIO;
но он выбирает токо тех работников у которых было движение по отпусках в таблице
OtpyckFakt , без строки (OtpyckFakt.MasterId=OtpyckMaster.Id) выбирает вообще все
Всем заранее благодарен за помощь

Всего записей: 1837 | Зарегистр. 09-04-2003 | Отправлено: 17:32 20-12-2006
Mickey_from_nsk

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для соединения таблиц с возможным отсутствием в одной из них ключевого поля используется не просто join, а outer join.в твоем случае будет примерно так

Код:
 
SELECT OtpyckMaster.FIO,OtpyckFakt.God,OtpyckMaster.DniAll DniM,  
OtpyckFakt.DniAll DniF,OtpyckMaster.DniAll-OtpyckFakt.DniAll DniR  
FROM OtpyckMaster m left outer join OtpyckFakt  f on (OtpyckFakt.MasterId=OtpyckMaster.Id)
WHERE f.Dni is NULL or f.Dni < m.DniAll
ORDER BY FIO;  
 

Не проверял, но работать надо в этом направлении.

Всего записей: 636 | Зарегистр. 21-10-2002 | Отправлено: 13:49 22-12-2006
MagistrAnatol



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mickey_from_nsk
пасиб получилось

Всего записей: 1837 | Зарегистр. 09-04-2003 | Отправлено: 10:18 04-01-2007
fat_lucky

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А еще для создания запросов можно использовать различные билдеры...

Всего записей: 70 | Зарегистр. 14-02-2003 | Отправлено: 13:55 04-01-2007
MagistrAnatol



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
fat_lucky
Назви хотябы один - я их никогда не использовал

Всего записей: 1837 | Зарегистр. 09-04-2003 | Отправлено: 09:56 10-01-2007
leshy84



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MagistrAnatol
А погуглить не пробовал?

Всего записей: 93 | Зарегистр. 18-03-2006 | Отправлено: 10:08 10-01-2007
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
может мне кто поможет, есть табицы:
 
users
+--------+--------+-----------+
| userid |  name  | newscount |
+--------+--------+-----------+
|      1 |  user1 |         0 |
|      2 |  user2 |         0 |
|      3 |  user3 |         0 |
+--------+--------+-----------+
 
news
+--------+--------+-------------+
| newsid | userid |    text     |
+--------+--------+-------------+
|      1 |      1 | бла бла бла |
|      2 |      1 | бла бла бла |
|      3 |      2 | бла бла бла |
|      4 |      3 | бла бла бла |
+--------+--------+-------------+
 
можно ли одним запросам сделать чтобы в таблице users.newscount было записано  
кол-во новостей которые написал каждый юзер, т.е чтобы стало:
+-----------+
| newscount |
+-----------+
|         2 |
|         1 |
|         1 |
+-----------+

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 00:46 27-01-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andead, думаю нужно написать скрипт на PHP, который бы это делал

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 00:57 27-01-2007
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
срипт то написан, с циклом, хотелось бы одним запросом если такое возможно

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 08:24 27-01-2007
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
andead
SELECT COUNT(news.newsid) AS newscount FROM news GROUP BY news.userid
выдаст, по идее
Цитата:
+-----------+
  | newscount |
  +--------+  
  |         2 |
  |         1 |
  |         1 |
  +--------+


Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 14:50 27-01-2007
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
выдаст он выдаст, мне нада UPDATE всех записей сделать с ноликов на эти значения
 
Добавлено:
может есть у кого сборник "крутых" примеров по SQL, запросы с подзапросами и т.д?

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 15:17 27-01-2007
A_V

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andead
update users set newscount =
(
  select count(n.userid) from news n
  where n.userid = users.userid
)

Всего записей: 770 | Зарегистр. 07-04-2002 | Отправлено: 16:23 27-01-2007
andead



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A_V
поклон в ноги писал похожее но не знал как в подзапросе узнать текущий userid
where n.userid = users.userid всё просто оказалось, мерси!

Всего записей: 1821 | Зарегистр. 22-09-2005 | Отправлено: 18:53 27-01-2007
Portfel



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Тоже вопрос про запрос...
 
 
...какую строчку надо написать в sql навигаторе (проще говоря какой надо сделать запрос), чтобы изменить параметр в таблице?  
 
то есть я запросом выбрал из базы данные, получилось нечно  
 
1 2 3  
1 X Z W  
 
2 D R T  
 
3 Y U U  
 
Как тут сменить W на нужное мне значение?  
А то я в "командах" суфиксах и знаках не очень силен в sql.  
 
Спасибо.

----------

В чем сила Брат?
----------

Всего записей: 938 | Зарегистр. 16-09-2004 | Отправлено: 18:24 22-06-2007
Cosmo_vk



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Portfel

Цитата:
 
...какую строчку надо написать в sql навигаторе (проще говоря какой надо сделать запрос), чтобы изменить параметр в таблице?  

use твоя_таблица
set  имя_колонки = w
where тут пишем твои условия.
а у меня есть пожелание все-таки конкретизировать вопрос.  

Всего записей: 45 | Зарегистр. 08-06-2007 | Отправлено: 20:38 23-06-2007 | Исправлено: Cosmo_vk, 20:40 23-06-2007
Portfel



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cosmo_vk
 
ну смотри, вот запрос
 
SELECT a.p_code, a.p_value
  FROM parameters a
 
выдает табличку  
ROW           P_CODE        P_VALUE
1                   105            <дата>
2                   103            <дата>
3                   101            <дата>
4                   106            <дата>
5                   102            <дата>
6                   201            <дата>
 
 
Надо поменять в базе дату во втором ряду...(p_value которая)
 
Use parameters a
set p_value = <новая дата>
where a.p_code like 103
 
???
так шоль?
А то еще чего -нить не "то" махну )

----------

В чем сила Брат?
----------

Всего записей: 938 | Зарегистр. 16-09-2004 | Отправлено: 09:03 25-06-2007 | Исправлено: Portfel, 09:05 25-06-2007
reflexfx



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
use <база данных> !!! а не имя таблицы
а теперь применимо к написанному  
update parameters set p_value = <new_date> where p_code=103
или с алиасами
update parameters a set a.p_value = <new_date> where a.p_code=103
 
 

Всего записей: 46 | Зарегистр. 23-11-2004 | Отправлено: 09:23 25-06-2007
Portfel



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reflexfx
А что значит
Цитата:
или с алиасами
???
Меня всегда интересовало, почему в пишется (у нас по крайней мере) parameters a
и соответсвенно все столбцы не p_code, а   a.p_code ???
Что за "а" ?
Еще раз спасибо.


----------

В чем сила Брат?
----------

Всего записей: 938 | Зарегистр. 16-09-2004 | Отправлено: 09:27 25-06-2007
reflexfx



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Алиас это всего лишь псевдоним таблицы

Всего записей: 46 | Зарегистр. 23-11-2004 | Отправлено: 10:26 25-06-2007
Portfel



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reflexfx
а чего "оно" без псевдонима не делает? )))
Да и все таки смысл не увловил. Зачем этот "псевдоним"?
 
а еще если
Цитата:
update parameters a set a.p_value = <new_date> where a.p_code=103  

что надо вписать вместо <new_date> чтоб получилось сегодняшнее число.Потому как вставив тупо 25.06.2007 не канает...пишет что "SQL command not properly ended"
 
Добавлено:
все сорь.."кавычки" то Вы забыли написать, ай ай ай...подставили меня )))))))))))))))))
Спасибо большое!!!!

----------

В чем сила Брат?
----------

Всего записей: 938 | Зарегистр. 16-09-2004 | Отправлено: 11:08 25-06-2007 | Исправлено: Portfel, 11:12 25-06-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru