Текущий архив: 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.53 MB
Время: 0.009 c