Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL [D7, Paradox]


Страницы:   1 2

Pako ©   (2003-12-15 14:00:00) 

Уважаемые мастера, помогите найти ошибку в запросе, плиз
дельфи на выполнение этого запроса не ругается, но результат 0 записей
SELECT Z.Razdel, Z.Project, C.Name_Prog, S.Name, P.FAM||" "||P.Nam||" "||P.Par As FullName
FROM Zayavki.DB Z, Char_Prog.DB C, Status_Prog.DB S Personal.DB P
WHERE Z.Konkurs=C.Kod_Prog AND C.Status=S.Kod AND Z.Rukovod=P.Number


Johnmen   (2003-12-16 09:35:00) [21]

>Pako

Веселите, уважаемая ? :)
Где же в запросе вы получаете поле C.Status ?


Pako   (2003-12-16 09:06:00) [22]


> sniknik © (16.12.03 08:48) [15]

результат выполнения запроса привести?
Не думаю что это необходимо!
Все поля заполнены кроме одного.Логика не правильна - знаю, и прошу подсказать, что нужно исправить, чтобы было правильно
запрос такой:
SELECT Z.Razdel, Z.Project, S.Name, C.Name_Prog, P.FAM||" "||P.Nam||" "||P.Par As FullName
FROM Zayavki.DB Z
LEFT JOIN Personal.DB P ON Z.Rukovod = P.Number
LEFT JOIN Char_Prog.DB C ON Z.Konkurs = C.Kod_Prog
LEFT JOIN Status_Prog.DB S ON C.Status = S.Kod
согласно этому запросу в итог попадают все записи из Zayavki.DB Z, (это мне и надо )но значение поля C.Status не отображается:((


sniknik   (2003-12-16 08:48:00) [23]

а чего ???, ?
тебе же сказали логика условия неправильная, т.е. твои данные (которых мы кстати не видим) не складываются в твое условие. чего нового хочеш услышать?
почему в результат попадают как раз те записи, которые нужны? странный вопрос людям которые не видят данных и не знают какие именно нужны.


Pako   (2003-12-16 08:30:00) [24]

???


Pako   (2003-12-16 06:41:00) [25]


> SELECT *
> FROM
> Zayavki.DB Z
> LEFT JOIN Personal.DB P ON Z.Rukovod = P.Number
> LEFT JOIN Char_Prog.DB C ON Z.Konkurs = C.Kod_Prog
> LEFT JOIN Status_Prog.DB S ON C.Status = S.Kod

Тот же результат...
...если связь "не по тому полю", то почему в результат попадают как раз те записи, которые нужны?


ЮЮ   (2003-12-16 06:31:00) [26]

>Z.Konkurs=C.Kod_Prog

Или установил связь не по тому полю или Z.Konkurs IS NULL.
Добавь в выборку Z.Konkurs и анализируй

>LEFT JOIN Status_Prog.DB S on S.Kod=C.Status

C.Status IS NULL

Для "отладки" сделай

SELECT *
FROM
Zayavki.DB Z
LEFT JOIN Personal.DB P ON Z.Rukovod = P.Number
LEFT JOIN Char_Prog.DB C ON Z.Konkurs = C.Kod_Prog
LEFT JOIN Status_Prog.DB S ON C.Status = S.Kod


ЮЮ   (2003-12-16 06:24:00) [27]

Z.Konkurs=C.Kod_Prog

Или установил связь не по тому полю или Z.Konkurs IS NULL.
Добавь в выборку Z.Konkurs и анализируй


Pako   (2003-12-16 05:52:00) [28]

SELECT Z.Razdel, Z.Project, C.Name_Prog, S.Name, P.FAM||" "||P.Nam||" "||P.Par As FullName
FROM Zayavki.DB Z, Personal.DB P, Char_Prog.DB C LEFT JOIN Status_Prog.DB S on S.Kod=C.Status
WHERE Z.Konkurs=C.Kod_Prog AND Z.Rukovod=P.Number

Возвращает нужные записи, но поле S.Name пусто


sniknik   (2003-12-15 14:38:00) [29]

Silver Alex © (15.12.03 14:31) [7]
ну да, ведь left.. (!) :(

> но ведь связи указываются для того чтобы не было полного декартова?
ну так вот эти связи тебе все отрубают ничего не оставляя. т.е. данных чтобы все три сработали в таблицах нет. (сделай для примера 1 связь/условие после 2 ...)


Pako   (2003-12-15 14:32:00) [30]


> sniknik © (15.12.03 14:18) [6]

да точно, запятую я забыла,
но ведь связи указываются для того чтобы не было полного декартова?


Silver Alex   (2003-12-15 14:31:00) [31]


> sniknik © (15.12.03 14:18) [6]

если в таблицах Char_Prog.DB C, Status_Prog.DB S, Personal.DB P
нет записей удовлетворяющих условиям Z.Konkurs=C.Kod_Prog AND C.Status=S.Kod AND Z.Rukovod=P.Number в запросе который прислал автор нричего не вернется, а при join будут хотя бы видны записи из таблицы Zayavki.DB, остальные быт null.Не понятно ведь что именно надо?


sniknik   (2003-12-15 14:18:00) [32]

Silver Alex © (15.12.03 14:12) [4]
по моему тоже самое будет, он же неявно тоже обьеденение делает.

Pako (15.12.03 14:11) [3]
связь будет, полное декартово произведение таблиц ты же их указал
FROM Zayavki.DB Z, Char_Prog.DB C, Status_Prog.DB S ,Personal.DB P
(кстати одну запятую забыл, сравни со своим)


Shaman   (2003-12-15 14:13:00) [33]

Используй JOIN


Silver Alex   (2003-12-15 14:12:00) [34]

попробуй так

SELECT Z.Razdel, Z.Project, C.Name_Prog, S.Name, P.FAM||" "||P.Nam||" "||P.Par As FullName
FROM Zayavki.DB Z
left outer join Char_Prog.DB C on Z.Konkurs=C.Kod_Prog
left outer join Status_Prog.DB S on C.Status=S.Kod
left outer join Personal.DB P on Z.Rukovod=P.Number


Pako   (2003-12-15 14:11:00) [35]


> sniknik © (15.12.03 14:06) [2]

я так и думаю, что проблема в логике, но если это убрать не будет связи м/д таблицами
а записи есть точно в др таблицах


sniknik   (2003-12-15 14:06:00) [36]

ошибка здесь (логика, нет совпадений) -> WHERE Z.Konkurs=C.Kod_Prog AND C.Status=S.Kod AND Z.Rukovod=P.Number
убери это и запрос вернет записи, если они вообще есть.


Кщд   (2003-12-15 14:04:00) [37]

а в эксплорере не 0?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо