Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

SQL   Найти похожие ветки 

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

Уважаемые мастера, помогите найти ошибку в запросе, плиз
дельфи на выполнение этого запроса не ругается, но результат 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


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

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


 
sniknik ©   (2003-12-15 14:06) [2]

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


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


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

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


 
Silver Alex ©   (2003-12-15 14:12) [4]

попробуй так

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


 
Shaman ©   (2003-12-15 14:13) [5]

Используй JOIN


 
sniknik ©   (2003-12-15 14:18) [6]

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
(кстати одну запятую забыл, сравни со своим)


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


> 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.Не понятно ведь что именно надо?


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


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

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


 
sniknik ©   (2003-12-15 14:38) [9]

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

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


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

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 пусто


 
ЮЮ ©   (2003-12-16 06:24) [11]

Z.Konkurs=C.Kod_Prog

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


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

>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


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


> 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

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


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

???


 
sniknik ©   (2003-12-16 08:48) [15]

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


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


> 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 не отображается:((


 
Johnmen ©   (2003-12-16 09:35) [17]

>Pako

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


 
Silver Alex ©   (2003-12-16 10:13) [18]

посмотреть бы структуру таблиц и их связи


 
Pako   (2003-12-16 10:41) [19]


> Где же в запросе вы получаете поле C.Status ?

Веселю:)))
В С.Status только код, а в S.Name как раз наименование "статуса", его я и хочу получить:)))


 
Pako   (2003-12-16 12:25) [20]

Есть следующие таблицы:
- "Заявки" из всех полей нас интересует Z.Razdel и Z.Project (наименование раздела программы и наименование проекта соответственно), связана с "Программы" (Zayavki.Konkurs=Programm.Kod_Prog)
- "Программы" - поле C.Name_Prog (наименование раздела программы)

- "Статус программы" - S.Name (статус программы, например, федеральная, региональная и т.п), связана с "Программы" (Programm.Status=Status.Kod)

- "Персоналии" - из полей P.FAM||" "||P.Nam||" "||P.Par As FullName получаем ФИО, связана с "Заявки" (Zayavki.Rukovod=Person.Kod)

Надо получить список всех заявок.
Запрос

> Pako (16.12.03 09:06) [16]

возвращает все заявки, но без указания статуса, вот

Со всеми бывает , что элементарного не видишь:))
Может кто-нибудь поможет разобраться?


 
Плохиш_   (2003-12-16 12:30) [21]

>Pako (16.12.03 12:25) [20]

Значит несуществует таких статусов:
C.Status = S.Kod


 
Pako   (2003-12-16 12:36) [22]

Да как же не существует, когда для каждой программы указан статус!!! Точно есть две записи 2=2, (федеральная), несоклько 5=5(международная и т.п.)


 
Silver Alex ©   (2003-12-16 12:38) [23]


> Pako (16.12.03 12:25) [20]

это вобщем то и по запросу видно.Тип полей Programm.Status , Status.Kod, null могут быть?Foreign key есть?
напиши
select * from Programm p
where
exists (select * from Status s
where
P.Status=s.Kod)
хоть что нибудь вернет?


 
Кщд   (2003-12-16 12:41) [24]

а C.Kod_Prog может быть null?


 
Pako   (2003-12-16 12:55) [25]


> Silver Alex © (16.12.03 12:38) [23]

Но этот вернет значение только в том случае, если существует запись в поле Status.
Мне нужно, чтобы попали заявки с программами и где указан статус и где не указан. Точнее - должны попасть все заявки независимо заполнены ли указанные поля или нет. (Т.е. если была заявка - она по-любому должна отобразиться, даже если у нее указано только наименование проекта)


 
Плохиш_   (2003-12-16 12:58) [26]

>Pako (16.12.03 12:55) [25]

ээээ, хмм .... Гусары! молчать!!!


 
Кщд   (2003-12-16 13:00) [27]

я не гусар, но, кроме RTFM, добавить нечего


 
Silver Alex ©   (2003-12-16 13:01) [28]


> Pako (16.12.03 12:55) [25]

Правильно, но мы то не знаем что у тебя творится.Может нет там записей вообще, или они разные.Ты бы на вопросы ответила может сообща и побороли бы багу


 
Pako   (2003-12-16 13:04) [29]

Плохиш_ и Кщд вы тему форума не перепутали случайно???


 
Pako   (2003-12-16 13:14) [30]


> Ты бы на вопросы ответила

На какие??? Вы то их сами сформулировать можете? Такое ощущение что все на разных языках говорят!

а C.Kod_Prog может быть null?
да может быть, но можно понять и по-другому (типа это поле вообще пустое в таблице)


 
Кщд   (2003-12-16 13:15) [31]

Pako (16.12.03 13:04) [29]
а Вы сами смысл запроса, который Вы привели последний раз понимаете?
советы - штука хорошая, но и самому задумываться - не лишнее.
да и прочитать о left/right join неплохо б.


 
Silver Alex ©   (2003-12-16 13:20) [32]


> На какие??? Вы то их сами сформулировать можете? Такое ощущение
> что все на разных языках говорят!


повторю

Тип полей Programm.Status , Status.Kod, null могут быть?Foreign key есть?
напиши
select * from Programm p
where
exists (select * from Status s
where
P.Status=s.Kod)
хоть что нибудь вернет?


 
Pako   (2003-12-16 13:23) [33]

ну запуталась я в этом запросе совсем:)))


 
sniknik ©   (2003-12-16 13:26) [34]

Pako (16.12.03 12:55) [25]
и ты делаеш связь по несуществующим данным и удивляешся почему там ничего нет?

старанно было бы наоборот если бы было.

Pako (16.12.03 13:04) [29]
после стольких повторений, и отказов с твоей стороны что это не так, и получить подтверждение....
тут только по гусарски высказатся хочется, да так что это будет именно в тему ветки.

Pako (16.12.03 13:23) [33]
а еще молчиш как партизан. и проверки что предлагают не делаеш.


 
Кщд   (2003-12-16 13:27) [35]

>а C.Kod_Prog может быть null?
>да может быть
вот этих записей (с C.Kod_Prog=null), согласно Вашему запросу, вы и не увидите в результирующем наборе.
ставьте просто join и разгребайте.
и прочитайте ж наконец-то об объединениях


 
Pako   (2003-12-16 13:32) [36]


> null могут быть?

да
во всех таблицах только по одному уникальному ключу


 
sniknik ©   (2003-12-16 13:36) [37]

> во всех таблицах только по одному уникальному ключу
вот по ним связь и делай (по ключам)



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.027 c
1-37644
Hyboid
2003-12-25 19:12
2004.01.13
DLL Strings


1-37757
Kuku
2003-12-30 00:38
2004.01.13
case of не работает для строк


3-37578
ДмитрийБ
2003-12-13 18:45
2004.01.13
Не срабатывают запросы...


1-37691
Эли
2003-12-23 14:10
2004.01.13
Иконки в файле Project.res


1-37753
Мыш
2003-12-29 23:33
2004.01.13
сохранить настройки