Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь по выборке из базы / 9 сообщений из 9, страница 1 из 1
16.10.2014, 15:36:07
    #38778774
nik2101
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
Есть база (MySQL), в ней есть таблицы: "sotrudniki" и "tabel".
В таблице "tabel" есть поля: id_sotr, data_rab, smena_priznak и т.д.
Пытаюсь выбрать из таблицы "tabel" всех сотрудников, у которых smena_priznak не равно ('Я','СМ') и сотрудников, не имеющих записи в табеле (например забыли отметить)
Если пишу так
Код: plsql
1.
2.
3.
4.
5.
SELECT sotrudniki.id, tabel.data_rab, tabel.smena_priznak 
FROM `tabel1`.`sotrudniki` sotrudniki 
     LEFT JOIN `tabel1`.`tabel` tabel ON sotrudniki.id=tabel.id_sotr AND tabel.data_rab='2014-10-15' 
WHERE sotrudniki.id_podr!='99' AND sotrudniki.id_podr!='999' 
ORDER BY sotrudniki.id_podr asc


то выдает всех, в том числе и тех, кого не отметили.

А если так
Код: plsql
1.
2.
3.
4.
5.
SELECT sotrudniki.id, tabel.data_rab, tabel.smena_itog, tabel.smena_priznak 
FROM `tabel1`.`sotrudniki` sotrudniki 
     LEFT JOIN `tabel1`.`tabel` tabel ON sotrudniki.id=tabel.id_sotr AND tabel.data_rab='2014-10-15' 
WHERE sotrudniki.id_podr!='99' AND sotrudniki.id_podr!='999' AND tabel.smena_priznak NOT IN ('Я','СМ') 
ORDER BY sotrudniki.id_podr asc


то, кроме тех у кого smena_priznak не равно ('Я','СМ'), пропадают и те, кого не отметили (т.е. с NULL),
Может еще есть какой-то способ отбросить из результата лишнее?
...
Рейтинг: 0 / 0
16.10.2014, 15:38:29
    #38778778
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
Запрос не соответствует логике. Внеси проверку на неравенство признака в условие связывания.
...
Рейтинг: 0 / 0
16.10.2014, 15:58:09
    #38778798
nik2101
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
AkinaЗапрос не соответствует логике. Внеси проверку на неравенство признака в условие связывания.
Пробовал, тогда получаю NULL для всех записей, кроме tabel.smena_priznak NOT IN ('Я','СМ')
...
Рейтинг: 0 / 0
17.10.2014, 09:09:51
    #38779392
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
nik2101,

тогда вот так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select s.id                  as id
     , t.data_rab            as data_rab
     , t.smena_priznak       as smena_priznak
  from SOTRUDNIKI as s  
  left join TABEL as t on s.id=t.id_sotr    
                      and s.id_podr not in (999,99)  -- выбрать все подразделения, кроме 99,999                                                        
where t.id_sotr is not null
  and t.smena_priznak not in ('Я','СМ') -- выбрать сотрудников, у которых "smena_priznak" не равно ('Я','СМ')
  and t.data_rab is null -- забыли отметить 
order by s.id_podr asc
...
Рейтинг: 0 / 0
17.10.2014, 09:21:49
    #38779407
nik2101
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
Станислав Клевцовnik2101,

тогда вот так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select s.id                  as id
     , t.data_rab            as data_rab
     , t.smena_priznak       as smena_priznak
  from SOTRUDNIKI as s  
  left join TABEL as t on s.id=t.id_sotr    
                      and s.id_podr not in (999,99)  -- выбрать все подразделения, кроме 99,999                                                        
where t.id_sotr is not null
  and t.smena_priznak not in ('Я','СМ') -- выбрать сотрудников, у которых "smena_priznak" не равно ('Я','СМ')
  and t.data_rab is null -- забыли отметить 
order by s.id_podr asc



Спасибо, но результат аналогичен результату моего запроса (№2). Т.е. nik2101пропадают и те, кого не отметили (т.е. с NULL)
...
Рейтинг: 0 / 0
17.10.2014, 09:41:23
    #38779432
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
nik2101,

Тогда уточняющий вопрос:
вы хотите выбрать сотрудников: 1) у которых tabel.data_rab is null (не отметили ) и tabel.smena_priznak NOT IN ('Я','СМ')

2) tabel.data_rab is null (не отметили ) или tabel.smena_priznak [b]NOT IN ('Я','СМ') ?
...
Рейтинг: 0 / 0
17.10.2014, 10:24:47
    #38779487
nik2101
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
Станислав Клевцов,

Я хочу выбрать следующих сотрудников:
1. для которых в табеле есть записи на определенную дату (например tabel.data_rab='2014-10-15')
2. для которых в табеле нет записей на ту же дату, что и для п.1 (например tabel.data_rab='2014-10-15')
и отбросить из результата тех, для которых tabel.smena_priznak='Я' или 'СМ'.

Вот результат выполнения первого запроса
id data_rab smena_priznak
1 2014-10-15 Я
5 2014-10-15 СМ
10 2014-10-15 Я
11 NULL NULL - для сотрудника с id=11 нет записи в табеле на дату '2014-10-15'
12 2014-10-15 Я
.........................................
476 2014-10-15 Б - для сотрудника с id=476 есть запись в табеле на дату '2014-10-15'
109 2014-10-15 ОТ

Вот результат выполнения второго запроса
id data_rab smena_priznak
476 2014-10-15 Б
109 2014-10-15 ОТ
431 2014-10-15
134 2014-10-15 ДО
144 2014-10-15 В


Как видно пропали не только записи, для которых tabel.smena_priznak='Я' или 'СМ', но и 11 NULL NULL .

Т.е. нужен результат вроде этого:
id data_rab smena_priznak
11 NULL NULL
476 2014-10-15 Б
109 2014-10-15 ОТ
431 2014-10-15
134 2014-10-15 ДО
144 2014-10-15 В
...
Рейтинг: 0 / 0
17.10.2014, 10:43:49
    #38779511
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
nik2101,

для 1 случая :

автор1. для которых в табеле есть записи на определенную дату (например tabel.data_rab='2014-10-15')

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select s.id                  as id
     , t.data_rab            as data_rab
     , t.smena_priznak       as smena_priznak
  from SOTRUDNIKI as s  
     left join  TABEL as t on s.id=t.id_sotr    
                                     and s.id_podr not in (999,99)                                                           
where t.id_sotr is not null
  and  t.data_rab is not null
order by s.id_podr asc
...
Рейтинг: 0 / 0
17.10.2014, 10:56:52
    #38779534
Станислав Клевцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по выборке из базы
nik2101,

и 2 случая

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select s.id                  as id
     , t.data_rab            as data_rab
     , t.smena_priznak       as smena_priznak
  from SOTRUDNIKI as s  
     left join  TABEL as t on s.id=t.id_sotr    
                                     and s.id_podr not in (999,99)                                                                        
where t.id_sotr is not null
  and  t.data_rab is null
  and t.smena_priznak not in ('Я','СМ')
order by s.id_podr asc
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь по выборке из базы / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]