powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Представление
25 сообщений из 38, страница 1 из 2
Представление
    #34257682
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем дорого дня.

Вопрос.
Не могу понять почему по запросу

SELECT Fio_l.familia, Sotr_l.familia AS familia2, Fio_l.checked,;
Sotr_l.num;
FROM ;
fio_l Fio_l ;
INNER JOIN sotr_l Sotr_l ;
ON Fio_l.checked = Sotr_l.num

выводит по четыре раза запись.

Искал по форуму, но только так и не понял. Если не сложно поясните в чем проблема.
...
Рейтинг: 0 / 0
Представление
    #34257698
VictorSKВсем дорого дня.

Вопрос.
Не могу понять почему по запросу

SELECT Fio_l.familia, Sotr_l.familia AS familia2, Fio_l.checked,;
Sotr_l.num;
FROM ;
fio_l Fio_l ;
INNER JOIN sotr_l Sotr_l ;
ON Fio_l.checked = Sotr_l.num

выводит по четыре раза запись.

Искал по форуму, но только так и не понял. Если не сложно поясните в чем проблема.
Посмотри - либо в fio_l, либо в sotr_l есть дублированные записи. Вот результат тебе и выдается...
...
Рейтинг: 0 / 0
Представление
    #34257705
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет дублей это однозначно.
...
Рейтинг: 0 / 0
Представление
    #34257731
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VictorSKНет дублей это однозначно.

Тогда тестовый пример в студию.
...
Рейтинг: 0 / 0
Представление
    #34257742
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример чего именно?
...
Рейтинг: 0 / 0
Представление
    #34257749
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VictorSKПример чего именно?

Создания двух курсоров + заполнения двумя-тремя контрольными записями + Select показывающий проблему дублирования в выборке.
...
Рейтинг: 0 / 0
Представление
    #34257796
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы хоти сказать, что для нормального представления нужно создавть курсор на каждую таблицу?
...
Рейтинг: 0 / 0
Представление
    #34257822
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VictorSKВы хоти сказать, что для нормального представления нужно создавть курсор на каждую таблицу?

Нет.

Что бы понять проблему надо увидеть, что Вы делаете и что не получается, поэтому нужен контрольный пример.
...
Рейтинг: 0 / 0
Представление
    #34257833
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица fio содержить поля: familia, name, otch, checked (это поле содержить уникальный ключ сотрудника, который работал с данным клиентом), таблица sotr: num (ключ сотрудника), familia, name, otch.

Я хотел стелать чтобы в запросе на против каждого клиента стояла фамилия сотрудника, как при помощи relation, но данную функцию использовать не хочу.
...
Рейтинг: 0 / 0
Представление
    #34257887
VictorSKТаблица fio содержить поля: familia, name, otch, checked (это поле содержить уникальный ключ сотрудника, который работал с данным клиентом), таблица sotr: num (ключ сотрудника), familia, name, otch.

Я хотел стелать чтобы в запросе на против каждого клиента стояла фамилия сотрудника, как при помощи relation, но данную функцию использовать не хочу.
Вас же просят привести исходные данные и результаты работы запроса, чтобы мы могли понять есть ли дублирование записей или нет ...

По простому можно сказать, что у Вас связь между таблицами "иногие-к-одному", т.е. много клиентов обслуживал один и тот же сотрудник. И, в результате запроса, данные по содруднику в результирующей таблице будут дублироваться... Это вполне нормально....
...
Рейтинг: 0 / 0
Представление
    #34257889
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таком случае как этого избежать?
...
Рейтинг: 0 / 0
Представление
    #34257898
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VictorSKТаблица fio содержить поля: familia, name, otch, checked (это поле содержить уникальный ключ сотрудника, который работал с данным клиентом), таблица sotr: num (ключ сотрудника), familia, name, otch.

Я хотел стелать чтобы в запросе на против каждого клиента стояла фамилия сотрудника, как при помощи relation, но данную функцию использовать не хочу.

Ну вот всё вот это можно изложить в коде или его за Вас накдо написать ?

Код: plaintext
1.
2.
CREATE CURSOR fio (familia c( 20 ) , name  c( 20 ), otch  c( 20 ), checked i)

CREATE CURSOR sort (num i, familia c( 20 ), name c( 20 ), otch c( 20 ))

Содержание курсоров сами заполните или тоже надо написать?
...
Рейтинг: 0 / 0
Представление
    #34257928
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
И это единственный вариант?
...
Рейтинг: 0 / 0
Представление
    #34257945
VictorSKВ таком случае как этого избежать?
А что Вы хотите получить?
Отчет о том какой сотрудник каких клиентов обслуживал?
Так это Вы и получаете. А уж как дальше эту информацию отформатировать - Ваши проблемы...
Почитайте-ка теорию по проектированию Баз данных: нормализация, нормальные формы, универсальное отношение...
А потом, если останутся вопросы, вернемся к обсуждению...
...
Рейтинг: 0 / 0
Представление
    #34258008
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если fio_i список клиентов (поле checked - ключ сотрудника, который его обслуживает) , а sotr_l - список сотрудников (поле num - ключ сотрудника), то ваш запрос синтаксически и семантически правильный.
Если вы получаете по 4 РАЗНЫЕ записи, а поле num - первичный ключ таблицы сотрудников и поля одинаковые по типу (например INT), то смотрите ваши данные в таблице клиентов. Где-то вы завели по несколько раз одного и того и того же клиента.
С уважением, Алексей
...
Рейтинг: 0 / 0
Представление
    #34258017
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Алексей.
Так все и есть. Только все записи таблицы дублируются 4 раза.
...
Рейтинг: 0 / 0
Представление
    #34258060
VictorSKСпасибо Алексей.
Так все и есть. Только все записи таблицы дублируются 4 раза.
Что? При просмотре результатов запроса в обычном browse по четыре одинаковых записи?
"Не верю..."(с)
Приведите-ка все-таки примеры.... Уже который раз Вас просят....
А то как-то с телепатическими способностями туго у нас...
...
Рейтинг: 0 / 0
Представление
    #34258090
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот еще раз пример.

Две таблицы: fio_l (familia, name, otch, checked) и sotr_l (num, familia, name, otch)

Далее делаю следующее:

SELECT Fio_l.familia, Sotr_l.familia AS familia2, Fio_l.checked,;
Sotr_l.num;
FROM ;
fio_l Fio_l ;
INNER JOIN sotr_l Sotr_l ;
ON Fio_l.checked = Sotr_l.num

На выходе у каждой записи 4 дубля.
...
Рейтинг: 0 / 0
Представление
    #34258177
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VictorSK
На выходе у каждой записи 4 дубля.

И где

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE CURSOR fio_l (familia c( 20 ) , name  c( 20 ), otch  c( 20 ), checked i)

CREATE CURSOR sotr_l (num i, familia c( 20 ), name c( 20 ), otch c( 20 ))

INSERT INTO fio_l (familia , name , otch , checked ) ;
VALUES ('Ivanoff', 'Ivan', 'Ivanovich',  1 )

INSERT INTO sotr_l (num , familia , name , otch ) ;
VALUES ( 1 , 'Petroff', 'Petr', 'Petrovich')

SELECT Fio_l.familia, Sotr_l.familia AS familia2, Fio_l.checked,;
Sotr_l.num;
FROM ;
fio_l Fio_l ;
INNER JOIN sotr_l Sotr_l ;
ON Fio_l.checked = Sotr_l.num
...
Рейтинг: 0 / 0
Представление
    #34258187
VictorSKВот еще раз пример.

Две таблицы: fio_l (familia, name, otch, checked) и sotr_l (num, familia, name, otch)

Далее делаю следующее:

SELECT Fio_l.familia, Sotr_l.familia AS familia2, Fio_l.checked,;
Sotr_l.num;
FROM ;
fio_l Fio_l ;
INNER JOIN sotr_l Sotr_l ;
ON Fio_l.checked = Sotr_l.num

На выходе у каждой записи 4 дубля.
От Вас просили примерно следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create cursor fio_l (familia c( 20 ), name c( 20 ), otch C( 20 ), checked n( 10 , 0 ))
create cursor sotr_l (num n( 10 , 0 ), familia C( 20 ), name C( 20 ), otch C( 20 ))

select  fio_l 
insert into fio_l values("AAAAA","BBB","CCC", 12345 )
insert into fio_l values("AAAAB","BBB","CCC", 12347 )
insert into fio_l values("AAABB","BBB","CCC", 12346 )
insert into fio_l values("AABBB","BBB","CCC", 12348 )

select sotr_l
insert into sotr_l values( 12345 ,"BAAAA","BBB","CCC")
insert into sotr_l values( 12348 ,"BBAAA","BBB","CCC")
insert into sotr_l values( 12347 ,"BBBAA","BBB","CCC")
insert into sotr_l values( 12346 ,"BBBBA","BBB","CCC")

SELECT Fio_l.familia, Sotr_l.familia AS familia2, Fio_l.checked,;
Sotr_l.num;
FROM ;
fio_l Fio_l ;
INNER JOIN sotr_l Sotr_l ;
ON Fio_l.checked = Sotr_l.num ;
into cursor query nofilter

brow norm
Выполнил такую программу - все нормально (т.е. по одной записи, нет дублирования)... Так что ищи проблему в дублировании данных таблиц, участвующих в запросе...
...
Рейтинг: 0 / 0
Представление
    #34258284
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно я не так об`яснил с самого начала.

Я хочу что бы в запросе выводилось ФИО из fio_l, а в место ключа cheked ФИО из sotr_l и не важно есть так ключ или нет, тоесть вывести все записи из fio_l с заменой ключа cheked на ФИО из sotr_l.
...
Рейтинг: 0 / 0
Представление
    #34258397
VictorSKВозможно я не так об`яснил с самого начала.

Я хочу что бы в запросе выводилось ФИО из fio_l, а в место ключа cheked ФИО из sotr_l и не важно есть так ключ или нет, тоесть вывести все записи из fio_l с заменой ключа cheked на ФИО из sotr_l.
Это-то понятно из твоего запроса. Не понятен лишь один момент, а именно:
автор
выводит по четыре раза запись.

Вот это и хотим у тебя выяснить... Уже на протяжении 20 постов... А ты все не "колешься"
...
Рейтинг: 0 / 0
Представление
    #34258502
VictorSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот таблицы.
...
Рейтинг: 0 / 0
Представление
    #34258816
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть список клиентов и список сотрудников. В результате выполнения запроса ты получаешь список: фимилия клиента - фамилия сотрудника

1) Один сотрудник может работать с НЕСКОЛЬКИМИ клиентами? Очевидно - может.

Т.е. вполне возможно что в результирующей выборке у нескольких клиентов будет отображен один и тот же сотрудник

2) РАЗНЫЕ клиенты могут иметь одну и ту же фамилию (Fio_l.familia)? Очевидно - тоже могут.

Т.е. вполне возможно, что в результирующей выборке у нескольких сотрудников будет отображена одна и та же фамилия клиента

3) Могут условия 1) и 2) выполняться ОДНОВРЕМЕННО? Тоже могут!

Т.е. разные клиенты имеют одну и ту же фамилию и обслуживаются одним и тем же сотрудником.


Чтобы проверить это предположение сделай такой запрос:

Код: plaintext
SELECT familia, checked FROM fio WHERE not EMPTY(checked) ORDER BY  1 , 2 

Ты получишь список всех клиентов, которые имеют не пустое значение в поле checked. Т.е. это те клиенты, которые теоретически могут быть сопоставлены с сотрудниками.

Видим довольно большое количество повторов. Чтобы понять, действительно ли это повторы или просто одинаковые значения необходимо добавить уникальный идентификатор записи. В данном случае, это, видимо, поле num.

Код: plaintext
SELECT num, familia, checked FROM fio WHERE not EMPTY(checked) ORDER BY  2 , 3 

Т.е. это просто "однофамильцы", хотя физически разные клиенты.
...
Рейтинг: 0 / 0
Представление
    #34258824
VictorSKВот таблицы.
Если ты имел в виду, что 4 раза повторяется фамилия "-", то это так и есть.
Фамилия "-" имеет четыре повторения:
id=1; id=171; id=183; id=869
Остальное все нормальное
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Представление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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