Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
SELECT DISTINCT dbo.tab1.prom
FROM ((dbo.tab1 LEFT JOIN dbo.tab2 ON dbo.tab1.tov = dbo.tab2.name) LEFT JOIN dbo.tab3 ON dbo.tab1.tov = dbo.tab3.klass) LEFT JOIN dbo.tab3 AS [tab33] ON dbo.tab2.klass = [tab33].klass
GROUP BY dbo.tab1.prom,[tab33].[city] & [dbo.tab3].[city]
HAVING ((([tab33].[city] & [dbo.tab3].[city]) Is Not Null)
Выдаёт ошибку
The column prefix 'dbo.classes' does not match with a table name or alias name used in the query.
Есть ли какие-нибудь средства в Sql Server, помогающих самостоятельно разобраться, что "не нравится" генератору Sql Server ?
Просто этот же запрос безошибочно отрабатывает в Access, получается, что логика его верна, и где искать ошибку не знаю.
Спасибо.
12 ноя 09, 12:41    [7919546]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36801
А ничего, что 'dbo.classes' вообще нет в этом запросе?
12 ноя 09, 12:44    [7919577]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Supra93
Member

Откуда:
Сообщений: 8174
dbo.tab1.prom
А что разделено точками (в акцесе)?
12 ноя 09, 12:44    [7919578]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Supra93
Member

Откуда:
Сообщений: 8174
Supra93
dbo.tab1.prom
А что разделено точками (в акцесе)?

Тьфу. вопрос снят
12 ноя 09, 12:45    [7919596]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
в результате каких действий вы получаете эту ошибку?
--------------------------------------------------------------
Дьявол кроется в деталях.
12 ноя 09, 12:47    [7919616]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
ошиблась
ошибка такая ...
The column prefix 'dbo.tab3' does not match with a table name or alias name used in the query.
12 ноя 09, 12:49    [7919633]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
Дедушка,
ошибку получаю в результате запуска одного этого запроса в QA
12 ноя 09, 12:50    [7919641]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Guest1
ошиблась
ошибка такая ...
The column prefix 'dbo.tab3' does not match with a table name or alias name used in the query.

В вашей базе нет таблицы с именем [dbo.tab3]. Что тут непонятного???

[dbo].[tab3]
dbo.tab3
dbo.[tab3]
но не
[dbo.tab3] - это таблица <ваша база>.<ваша схема>.[dbo.tab3]
12 ноя 09, 12:56    [7919704]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
GROUP BY dbo.tab1.prom,[tab33].[city] & [dbo.tab3].[city]
HAVING ((([tab33].[city] & [dbo.tab3].[city]) Is Not Null)

и что вы в запросе всё время dbo пишите? у вас это функция?
12 ноя 09, 12:57    [7919720]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
залётный
Guest
Konst_One
и что вы в запросе всё время dbo пишите?

А почему не надо писать?
12 ноя 09, 13:00    [7919745]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
предыдущую ошибку исправила, спасибо
а вот как быть с & ,- на него тоже SQL ругается
заменила & на +, ошибка исчезла, но результат запроса неверный, должно выходить 2 строки а не выходит ни одной
12 ноя 09, 13:55    [7920379]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
Guest1
предыдущую ошибку исправила, спасибо
а вот как быть с & ,- на него тоже SQL ругается
заменила & на +, ошибка исчезла, но результат запроса неверный, должно выходить 2 строки а не выходит ни одной

Оператор & в MSSQL и в Access - это совершенно разный оператор
И что вы хотите получить данным запросом тоже совершенно непонятно
12 ноя 09, 13:58    [7920404]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Guest1
предыдущую ошибку исправила, спасибо
а вот как быть с & ,- на него тоже SQL ругается
заменила & на +, ошибка исчезла, но результат запроса неверный, должно выходить 2 строки а не выходит ни одной

используйте вместо & вот это
+' '+
12 ноя 09, 14:02    [7920440]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
хочу получить вот что ...
есть 2 поля , по условию задачи в каждой строке может быть заполнено или первое или второе поле. Я хочу получить поле из значений этих двух полей.То есть
из
2 null
null 12
5 null
null 18

получаю

2
12
5
18
12 ноя 09, 14:03    [7920447]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
iljy
Member

Откуда:
Сообщений: 8711
Guest1,

HAVING ((([tab33].[city] & [dbo.tab3].[city]) Is Not Null)
==

HAVING coalesce([tab33].[city], [dbo.tab3].[city]) is not null

А сложение строк как вы описали - это isnull([tab33].[city],'') + isnull([dbo.tab3].[city],'')

А null + что угодно = null
12 ноя 09, 14:07    [7920485]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
выдаёт ошибку

Column 'tab33.city' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause.

несмотря на то что coalesce([tab33].[city], [dbo.tab3].[city])
включено и в GROUP BY и в HAVING

наверное, надо попробовать переписать запрос без coalesce, ну например,
используя UNION и GROUP BY,
хотя, конечно, хотелось бы разобраться почему с coalesce нельзя.
12 ноя 09, 16:46    [7921825]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
iljy
Member

Откуда:
Сообщений: 8711
Guest1,
потому что сообщение об ошибке надо читать внимательно
так напишите
GROUP BY dbo.tab1.prom, isnull([tab33].[city],'') + isnull([dbo.tab3].[city],'')
HAVING (isnull([tab33].[city],'') + isnull([dbo.tab3].[city],'')) Is Not Null
12 ноя 09, 16:49    [7921835]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
Guest1

хотя, конечно, хотелось бы разобраться почему с coalesce нельзя.

Для этого нужно публиковать свои запросы целиком, а не частями
В оригинальном запросе у вас зачем то и DISTINCT и GROUP BY и HAVING - зоопарк целый
12 ноя 09, 16:51    [7921851]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
iljy,
прошу прощения, я просто не поняла для чего в вашем предыдущем сообщении строка
HAVING coalesce([tab33].[city], [dbo.tab3].[city]) is not null

и прочитала так образом ....
Надо вот так
HAVING coalesce([tab33].[city], [dbo.tab3].[city]) is not null

...А сложение строк как вы описали - это isnull([tab33].[city],'') + isnull([dbo.tab3].[city],'')
А null + что угодно = null ...
и это не ваш случай
12 ноя 09, 17:07    [7921936]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
Glory,
"не зоопарк",
такая задача,
и в Access мой запрос даёт верный результат,
просто с синтаксисом SQL пока затруднения,- но это поправимо.
Спасибо
12 ноя 09, 17:09    [7921945]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
Guest1
Glory,
"не зоопарк",
такая задача,

Это - не задача. Это ваша попытка ее решения
Вот зачем в SELECT только одно поле dbo.tab1.prom, а в GROUP BY - два выражения ?
12 ноя 09, 17:18    [7921988]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
iljy
Member

Откуда:
Сообщений: 8711
Guest1
iljy,
прошу прощения, я просто не поняла для чего в вашем предыдущем сообщении строка
HAVING coalesce([tab33].[city], [dbo.tab3].[city]) is not null

и прочитала так образом ....
Надо вот так
HAVING coalesce([tab33].[city], [dbo.tab3].[city]) is not null

...А сложение строк как вы описали - это isnull([tab33].[city],'') + isnull([dbo.tab3].[city],'')
А null + что угодно = null ...
и это не ваш случай

Надо код выделять тегами когда вопрос задаете. В ваш GROUP BY я просто не вчитался. И сервер вам выдал ошибку вполне конкретную, которая вполне конкретно исправляется. Надо творчески переосмысливать советы ;)
использование DISTINCT и GROUP BY в одном запросе - очень редко когда нужно. В вашем случае - явно не надо. Более чем достаточно будет сделать так:
SELECT DISTINCT t1.prom
FROM dbo.tab1 t1
	 LEFT JOIN dbo.tab2 t2 ON t1.tov = t2.name
	 LEFT JOIN dbo.tab3 t31 ON t1.tov = t31.klass
	 LEFT JOIN dbo.tab3 t32 ON t2.klass = t32.klass
WHERE coalesce(t32.[city],t31.[city]) Is Not Null
И отвыкайте скобками выделять JOIN без явной на то необходимости. А привыкайте - использовать псевдонимы для даблиц.
12 ноя 09, 18:45    [7922441]     Ответить | Цитировать Сообщить модератору
 Re: самостоятельный пойск ошибок в запросе  [new]
Guest1
Member

Откуда: Кристиан Гислер - ТЫ ЛУЧШИЙ !!! :)))
Сообщений: 1342
спасибо за ценные замечания и помощь, со всем разобралась, задачу сделала
13 ноя 09, 11:37    [7924699]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить