Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.01 c
7-37960
nollie
2003-10-28 09:43
2004.01.13
asm&lpt


3-37526
Stas
2003-12-17 10:59
2004.01.13
Диаграммы для InterBase


3-37535
Olga_Oo
2003-12-16 11:41
2004.01.13
String


14-37849
Vlad Oshin
2003-12-23 10:01
2004.01.13
outlook. сохранение вложений.


8-37808
Андрій
2003-09-11 16:33
2004.01.13
Тип графического файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский