powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите выполнить запрос
25 сообщений из 28, страница 1 из 2
Помогите выполнить запрос
    #38026644
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помогите выполнить запрос. Проверить Отсутствие обязанностей у мужчин, которые есть только у женщин.
Обязанности со следующими кодами могут быть только у женщин:

SET FILTER TO OCCURS("51010", kod)>0 OR OCCURS("51011", kod)>0 OR OCCURS("51012", kod)>0 OR OCCURS("51047", kod)>0 OR OCCURS("51026", kod)>0 OR OCCURS("51027", kod)>0 OR OCCURS("55033", kod)>0 OR OCCURS("55035", kod)>0

Обязанности хранятся в таблице osz.dbf. в этой таблице можно выделить основные поля Name и kod (название и код).
Есть еще две таблицы Ludi (люди) в ней можно выделить основные поля FIO, id.
Есть третья таблица которая содержащая в себе информацию о функциях этих людей. В ней основное поле kod_obyaz и id.

Несколько часов потратила на осмысливание но никак не могу разобраться. Надо проверить отсутствие обязанностей у мужчин, которые есть у женщин.
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026718
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана06Надо проверить отсутствие обязанностей у мужчин, которые есть у женщин.
Выбираешь в один курсор обязанности мужчин (obm), в другой женщин (obw)
затем
Код: sql
1.
select * from obw where obw.id not in (select id from obm)


id - код обязанности
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026730
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, так то можно, но у меня есть таблица где хранятся данные о людях о мужчинах и женщинах, и есть таблица obyaz с полями kod_obyaz и id где хранятся функции которые они выполняли в какой-то промежуток скажем за месяц. И надо проверить отсутствие у мужчин тех обязанностей которые могут быть только у женщины.

таблица obyaz и ludi связаны по полю id.. А таблица osz с таблицей obyaz по полю kod_obyaz (kod)
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026751
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана06хранятся функции которые они выполняли в какой-то промежуток скажем за месяц. И надо проверить отсутствие у мужчин тех обязанностей которые могут быть только у женщины.
В чем проблема выбрать все функции выполненные мужчинами за нужный период? также женщинами.
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026759
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, в этом проблем нет. Проблема в том что не понимаю как проверить отсутствие обязанностей у мужчин, которые у женщин только могут быть
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026764
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
обязанности мужчин могу выбрать так

Код: sql
1.
select * from obyaz where ludi.id=obyaz.id



ну выберу я их , а дальше как поступить?
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026765
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана06Dima T, в этом проблем нет. Проблема в том что не понимаю как проверить отсутствие обязанностей у мужчин, которые у женщин только могут быть

Не отсутствие, а наличие.
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026780
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана06обязанности мужчин могу выбрать так

Код: sql
1.
select * from obyaz where ludi.id=obyaz.id



ну выберу я их , а дальше как поступить?
Я выше написал уже как
в один курсор обязанности мужчин
Код: sql
1.
select * from obyaz where ludi.id=obyaz.id into cursor obm


затем в другой обязанности женщин
Код: sql
1.
select * from obyaz where ??????? into cursor obw


затем выбираем обязанности которые есть у женщин и нет у мужчин
Код: sql
1.
select * from obw where obw.id not in (select id from obm)



Только что-то мне подсказывает что твоим запросом совсем другое выберется :)
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026781
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IgorNG, именно отсутствие проверить. Я выше написала какие обязанности могут быть только у женщин
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026806
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вы пишите
Код: sql
1.
select * from obyaz where ludi.id=obyaz.id into cursor obm

говоря что id это код обязанности. А у меня это не так:

давайте я вам заново скажу как связаны таблицы

Таблица Obyazannosti (поля Namm, kod_obz)
Таблица Ludi (поля ID)
Таблица Obyaz (поля id, kod_obz)

Таблицу Ludi и Obyaz можно связать по полю ID т.е. у человека с таким id такая обязанность
Таблицу Obyaz и Obyazannosti можно связать по полю Kod_obz.

И вот как теперь проверить следующее: Отсутствие у мужчин обязанностей которые могут быть только у женщин
обязанности с такими кодами могут быть только у женщин

SET FILTER TO OCCURS("51009", kod_obz)>0 OR OCCURS("51058", kod_obz)>0 OR OCCURS("51046", kod_obz)>0 OR OCCURS("51052", kod_obz)>0 OR OCCURS("51020", kod_obz)>0 OR OCCURS("51030", kod_obz)>0
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026813
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверить "отсутствие" означает, найти хотя бы одно "наличие". Другими словами, если Вы найдете среди обязанностей, назначенных мужчинам, хотя бы одну женскую обязанность, значит - ошибка.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select count(*) as kol ;
into cursor curResult ; 
from "обязанности_назначенные_мужчинам" ;
where kod in (select kod from "женские_обязанности")

if curResult.kol > 0
    MessageBox("Среди обязанностей, назначенных мужчинам найдено женских обязанностей " + transform(curResult.kol))
endif
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026826
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как Вы различаете

1. Мужчин и женщин
2. Какие обязанности могут быть только у женщин
3. Какие обязанности могут быть только у мужчин

Список кодов в тексте программы - крайне не удачное решение. Как временная "затычка" - пойдет. Но как постоянное решение - не годится. В подобных случаях, как правило, в таблице делают дополнительное поле, обозначающее, что вот эта обязанность может быть назначена только мужчине, только женщине или всем без ограничений.
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026829
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, а как вы проверяете отсутствие обязанностей если вы не использовали ни одно из полей которых я указала? можно конкретнее с моими полями.. а то я мучаюсь сижу поэтому написала сюда
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026834
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана06И вот как теперь проверить следующее: Отсутствие у мужчин обязанностей которые могут быть только у женщин
обязанности с такими кодами могут быть только у женщин

SET FILTER TO OCCURS("51009", kod_obz)>0 OR OCCURS("51058", kod_obz)>0 OR OCCURS("51046", kod_obz)>0 OR OCCURS("51052", kod_obz)>0 OR OCCURS("51020", kod_obz)>0 OR OCCURS("51030", kod_obz)>0
сначала не совсем понял про SET FILTER, как понимаю тут коды обязанностей которых не должно быть у мужчин. Тогда выбираем все что есть у мужчин и накладываем этот фильтр, если пусто - значит все нормально, если что-то в выборку попало - значит это обязанность которая не должна быть у мужчин но есть.

Если этот запрос выбирает обязанности мужчин
Диана06обязанности мужчин могу выбрать так
Код: sql
1.
select * from obyaz where ludi.id=obyaz.id


то оставить в нем только женские так:
Код: sql
1.
2.
3.
select * from obyaz where ludi.id=obyaz.id;
     and (OCCURS("51009", kod_obz)>0 OR OCCURS("51058", kod_obz)>0 OR OCCURS("51046", kod_obz)>0;
           OR OCCURS("51052", kod_obz)>0 OR OCCURS("51020", kod_obz)>0 OR OCCURS("51030", kod_obz)>0)
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026835
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Означает ли код вида

Код: sql
1.
OCCURS("51009", kod_obz)>0


что в одной записи в поле kod_obz может быть указан список кодов? Почему нельзя было написать

Код: sql
1.
kod_obz = "51009"
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026837
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ, в таком виде просто дали задание поэтому написала так: OCCURS("51009", kod_obz)>0, но главное что это коды которые не должны быть у мужчин
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026848
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, написала запрос, который вы говорите. В результате пустая выборка. Я так понимаю Это правильно если у мужчин не встречаются обязанности, которые могут быть только у женщин?
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026851
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, и еще вопрос один, если можно.. Таблица obyazannosti вообще не нужна получается? Просто в том фильтре который мне дали поле kod_obz это было поле из таблицы obyazannosti
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026861
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диана06Dima T, и еще вопрос один, если можно.. Таблица obyazannosti вообще не нужна получается? Просто в том фильтре который мне дали поле kod_obz это было поле из таблицы obyazannosti
Не нужна если поле kod_obz есть в таблице obyaz из которой идет выборка
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026874
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, а если эти поля разные названия имеют? я запуталась и одно и то же поле написала но на самом деле так:

SET FILTER TO OCCURS("51009", kod_obzyazannosti)>0 OR OCCURS("51058", kod_obzyazannosti)>0 OR OCCURS("51046", kod_obzyazannosti)>0 OR OCCURS("51052", kod_obzyazannosti)>0 OR OCCURS("51020", kod_obzyazannosti)>0 OR OCCURS("51030", kod_obzyazannosti)>0
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026878
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и вообще мне кажется выборка должна идти из таблицы Obyazannosti, таблица Obyaz содержит только код обязанности.
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026883
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело такое. У человека есть функции за месяц он сделал что-то.. и в таблице Obyaz хранится информация об этом. т.е. В Obyaz хранится код обязанности, Id человека, и еще другие данные. А в таблице Obyazannosti Хранятся вообще все обязанности, которые вообще могут быть у людей
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38026988
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так правильно будет логически если посмотреть?

Код: sql
1.
2.
3.
4.
SELECT * FROM Obyazannosti WHERE Obyaz.kod_obz=Obyazannosti.kod_obyazannosti ;
AND Obyaz.id=Ludi.id  ;
AND (OCCURS("51010", Kod_obz)>0 OR OCCURS("51011", Kod_obz)>0 OR OCCURS("51012", Kod_obz)>0 ;
OR OCCURS("51047", Kod_obz)>0 OR OCCURS("51026", Kod_obz)>0 OR OCCURS("51027", Kod_obz)>0 OR OCCURS("55033", Kod_obz)>0  OR OCCURS("55035", Kod_obz)>0 )




В результате пустая выборка получается у меня.
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38027055
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, я написала Ваш код, в таблице Obyaz изменила поле Kod_obyaz на 51009 т.е. такой может быть только у мужчины. И запустила. Все равно выборка пустая.
...
Рейтинг: 0 / 0
Помогите выполнить запрос
    #38027162
Диана06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделала так: только просьба проверить логику

Код: sql
1.
2.
3.
select * from Obyaz,Ludi where Ludi.id=Obyaz.id INTO CURSOR cur1
SELECT * FROM cur1 WHERE Kod_Obyaz=51009 OR Kod_Obyaz=51058 OR Kod_Obyaz=51046 OR Kod_Obyaz=51052 ;
 OR Kod_Obyaz=51020 OR Kod_Obyaz=51030 
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите выполнить запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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