powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запросики
17 сообщений из 17, страница 1 из 1
Запросики
    #34620789
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть следующий запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT foo.field_id, foo.field_name, ind_data.data
FROM (SELECT Ind_fields.id AS field_id, Ind_fields.table_id, Ind_fields.field_name, Ind_fields.sel
 FROM ind_dep!ind_tables 
    INNER JOIN ind_dep!ind_fields 
   ON  Ind_tables.id = Ind_fields.table_id
 WHERE  Ind_tables.grp =  1  AND  Ind_tables.hall_id =  2 ) as foo
   left Join ind_data 
     on ind_data.field_id=foo.field_id
   FULL JOIN ind_date
     ON ind_data.date_id=ind_date.id
WHERE ind_data.mode_id= 1  OR ind_data.mode_id IS NULL
Запрос работает, вроде, правильно. Кроме одного небольшого но. Он постоянно выкидывает одн запись из результата, т.е. идут ID номера полей: 232, 233, 234 (отсутсвует, хотя должен быть), 235, 236, 237, 238, 239. Как это выглядит, показано на картинке.
...
Рейтинг: 0 / 0
Запросики
    #34620822
И откуда этот 234 должен взяться? Он где-нибудь есть? Или он должен сгенериться? На каком основании?
...
Рейтинг: 0 / 0
Запросики
    #34620853
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запись с ID 234 находится в таблице ind_fields. Она просто выпадает из результата запроса.
...
Рейтинг: 0 / 0
Запросики
    #34620876
Да, но основная то таблица ind_tables, в которой, как я понял, этого номера нет. А связаны они по INNER, то есть из ind_ind_fields берется только то, что есть в ind_tables и ничего иного.

Поставь вместо INNER слово LEFT
...
Рейтинг: 0 / 0
Запросики
    #34620879
Поторопился: RIGHT
...
Рейтинг: 0 / 0
Запросики
    #34620922
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На картинке показано что содержит ind_tables. Отношение Ind_tables k ind_fields 1 to many. Вложенный запрос на то там и стоит.чтобы были выведены все поля из ind_tables, в независимости от того есть ли соответствующая запись в таблице ind_data.
...
Рейтинг: 0 / 0
Запросики
    #34620928
kolobok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неплохо бы привести структуру всех таблиц, участвующих в запросе
...
Рейтинг: 0 / 0
Запросики
    #34620935
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Запросики
    #34620938
чтобы были выведены все поля из ind_tables

В ней есть номер 234? Да или нет? Если его там нет, то почему он должен появиться в выборке?
...
Рейтинг: 0 / 0
Запросики
    #34620962
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to проходящий.

он есть, и находится в таблице ind_fields. смотри скрин в начале темы
...
Рейтинг: 0 / 0
Запросики
    #34620972
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я очень извиняюсь, на схему не попала одна таблица. Вот общая схема:
...
Рейтинг: 0 / 0
Запросики
    #34620988
Но ты же хочешь получить все записи не из ind_fields, а из ind_tables. А в ней этого номера нет. Он есть в другой таблице. Но в запросе ты не указал брать его из этой другой таблицы. Ты рапорядился брать только из ind_tables, в которой этого номера нет. И речь идет пока только о вложенном запросе. Дошло?
...
Рейтинг: 0 / 0
Запросики
    #34621001
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вы "цепляете" таблицу по LEFT JOIN, то условия отбора записей в этой таблице должны быть только и исключительно в опции ON. В условии WHERE допустимо сравнение только с NULL для полей этих таблиц.

Код: plaintext
1.
2.
3.
...
LEFT JOIN ind_data ON ind_data.field_id=foo.field_id AND ind_data.mode_id= 1 
...


В Вашем примере Вы получили условие: отобрать те записи из таблицы ind_tables, которые имеют связь с запись таблицы ind_data у которой значение поля ind_data.mode_id=1. Либо отобрать те записи таблицы ind_tables, которые не имеют связи с таблицей ind_data.

Однако Вы автоматически отбросили те записи таблицы ind_tables которые имеют связь с таблицей ind_data, но связанная запись имеет значение ind_data.mode_id<>1.

Если именно этого Вы и добивались, тогда запрос правильный.
...
Рейтинг: 0 / 0
Запросики
    #34621024
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с помощью ind_tables отсеиваются значения из ind_fields. Выбирается одна запись из ind_tables и затем выбираются все соответствующие записи из ind_fields. Связь следующая: ind_table.id=ind_fields.table_id. Значение ind_table.id=1. И в связке Значение 234 не учавствует. И вобще, сам вложенный запрос, если его брать отдельно, работает без глюков. Ошибка в основном запросе
...
Рейтинг: 0 / 0
Запросики
    #34621027
kolobok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По-моему, FULL JOIN здесь вообще ни причем. А еще интересно, что содержит IND_DATA (поле mode_id)?
...
Рейтинг: 0 / 0
Запросики
    #34621034
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to ВладимирМ

Nakonec hotj odin umnij chelovek nashelsja. Spasibo, vsje rabotajet :)
...
Рейтинг: 0 / 0
Запросики
    #34621485
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven ...Nakonec hotj odin umnij chelovek nashelsja...
Очень смелое заявление по отношению к другим участникам форума, честно пытавшимся Вам помочь...

P.S. Ничего личного, но будьте, пожалуйста, вежливее...
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запросики
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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