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

Откуда: Краснодар
Сообщений: 36
Доброго времени суток.
у меня есть 4 таблицы связываю их по inner join, кроме 3
select      
		Parametr.List.DISPLAY_NAME,
		Parametr.PAccount.VALUE, 
		--Parametr.PAccount.Id_Account, 
		Adress.Account.Id, 
		Parametr.PAccount.ID_PARAMETR, 
		Parametr.Type.NAME,
		Parametr.TypeParam(Parametr.Type.NAME) as TEnable, 
		Parametr.PAccount.DATE_BEGIN, 
		Parametr.PAccount.DATE_END,
		(Period.CountParam(Adress.Account.Id, Parametr.List.Id)) as Kol
                from	Parametr.List
		inner join Parametr.Type ON Parametr.List.ID_TYPE = Parametr.Type.ID
		inner join Parametr.PLAccount on Parametr.PLAccount.Id_Parametr = Parametr.List.Id
		left join Parametr.PAccount on Parametr.PAccount.Id_Parametr = Parametr.PLAccount.Id_Parametr
		inner join Adress.Account on Adress.Account.Id = Parametr.PAccount.Id_Account
			and Period.AccParam(Parametr.List.Id, Adress.Account.Id, Parametr.PAccount.Id) = 1
where Id_Account = 1


и если у меня отсутствуют записи в таблице Parametr.PAccount то у меня отсутствуют строчки. Помогите пожалуйста, в чем проблема?
21 ноя 13, 15:09    [15168817]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
dimkadv2
Помогите пожалуйста, в чем проблема?

В том, что inner join именно так и работает.
21 ноя 13, 15:11    [15168842]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Гость333
Member

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

1) перепишите запрос с использованием алиасов (псевдонимов) таблиц;
2) Id_Account — к какой таблице принадлежит?
21 ноя 13, 15:14    [15168875]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Впрочем, мой второй вопрос излишний. Когда вы перепишете запрос, это будет видно.
21 ноя 13, 15:19    [15168900]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
select      
		pl.DISPLAY_NAME,
		ppa.VALUE, 
		aa.Id, 
		ppa.ID_PARAMETR, 
		Parametr.Type.NAME,
		Parametr.TypeParam(Parametr.Type.NAME) as TEnable, 
		ppa.DATE_BEGIN, 
		ppa.DATE_END,
		(Period.CountParam(aa.Id, pl.Id)) as Kol
from	Parametr.List pl
		inner join Parametr.Type ON pl.ID_TYPE = Parametr.Type.ID
		inner join Parametr.PLAccount as ppl on ppl.Id_Parametr = pl.Id
		left join Parametr.PAccount ppa on ppa.Id_Parametr = ppl.Id_Parametr
		inner join Adress.Account as aa on aa.Id = ppa.Id_Account
			and Period.AccParam(pl.Id, aa.Id, ppa.Id) = 1
where Id_Account = 1

Id_Account - поле таблицы Parametr.PAccount
Это просто временная выборка, чтобы уменьшить количество строк в результате.
Понятное дело что inner join объединяет по соответствию, но left join должен вставить не достающие записи со значением null
21 ноя 13, 15:22    [15168933]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
dimkadv2
Id_Account - поле таблицы Parametr.PAccount

И что тогда неправильно делает where Id_Account = 1, если он фильтрует _все полученные записи_ на равенство 1-це ?
21 ноя 13, 15:24    [15168947]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
Извините, неправильно выложил
select      
		pl.DISPLAY_NAME,
		ppa.VALUE, 
		aa.Id, 
		ppl.ID_PARAMETR, 
		Parametr.Type.NAME,
		Parametr.TypeParam(Parametr.Type.NAME) as TEnable, 
		ppa.DATE_BEGIN, 
		ppa.DATE_END,
		(Period.CountParam(aa.Id, pl.Id)) as Kol
from	Parametr.List pl
		inner join Parametr.Type ON pl.ID_TYPE = Parametr.Type.ID
		inner join Parametr.PLAccount as ppl on ppl.Id_Parametr = pl.Id
		left join Parametr.PAccount ppa on ppa.Id_Parametr = ppl.Id_Parametr
		inner join Adress.Account as aa on aa.Id = ppa.Id_Account
			and Period.AccParam(pl.Id, aa.Id, ppa.Id) = 1
where aa.Id = 1
21 ноя 13, 15:24    [15168949]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
Glory,

Проблема в том, что если у меня нет соответствий по условию, то он не добавляет пустые строки в результат(на колонках value, date_begin, date_end), в итоге получается не полный список параметров
21 ноя 13, 15:27    [15168970]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
dimkadv2
Проблема в том, что если у меня нет соответствий по условию, то он не добавляет пустые строки в результат(на колонках value, date_begin, date_end), в итоге получается не полный список параметров

Наверное потому, что эти записи отфильтровываются. Ведь null не равен 1
21 ноя 13, 15:31    [15169008]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
то есть если у меня все значения параметров по периоду есть, то он у меня выводит 20 строк, но в данном случае значения по данному периоду у 2 параметров отсутствуют, и он отображает 18 строк, что ни есть гуд(((
21 ноя 13, 15:32    [15169011]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
Glory
Наверное потому, что эти записи отфильтровываются. Ведь null не равен 1

Так то да, но Id, по которому фильтрую, есть всегда!(в таблице Adress.Account)
21 ноя 13, 15:34    [15169033]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Гость333
Member

Откуда:
Сообщений: 3683
так попробуйте
select      
		pl.DISPLAY_NAME,
		ppa.VALUE, 
		aa.Id, 
		ppl.ID_PARAMETR, 
		Parametr.Type.NAME,
		Parametr.TypeParam(Parametr.Type.NAME) as TEnable, 
		ppa.DATE_BEGIN, 
		ppa.DATE_END,
		(Period.CountParam(aa.Id, pl.Id)) as Kol
from	Parametr.List pl
		inner join Parametr.Type ON pl.ID_TYPE = Parametr.Type.ID
		inner join Parametr.PLAccount as ppl on ppl.Id_Parametr = pl.Id
		left join Parametr.PAccount ppa
		inner join Adress.Account as aa on aa.Id = ppa.Id_Account
				and Period.AccParam(pl.Id, aa.Id, ppa.Id) = 1
				and aa.Id = 1
			on ppa.Id_Parametr = ppl.Id_Parametr
21 ноя 13, 15:37    [15169055]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
Гость333,

на "on" ругается(
21 ноя 13, 15:39    [15169078]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
dimkadv2
Glory
Наверное потому, что эти записи отфильтровываются. Ведь null не равен 1

Так то да, но Id, по которому фильтрую, есть всегда!(в таблице Adress.Account)

dimkadv2
Id_Account - поле таблицы Parametr.PAccount


Чему верить ?
21 ноя 13, 15:42    [15169108]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
Glory,

Извините, просто переписал,
Id_Account принадлежит таблице Parametr.Account,
но фильтрация происходит по таблице Adress.Account
21 ноя 13, 15:43    [15169125]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
left join Parametr.PAccount ppa on ppa.Id_Parametr = ppl.Id_Parametr
inner join Adress.Account as aa on aa.Id = ppa.Id_Account and Period.AccParam(pl.Id, aa.Id, ppa.Id) = 1
where aa.Id = 1
Объясните, что вы ждете от строго соединения пустой таблицы Parametr.PAccount с Adress.Account ?
21 ноя 13, 15:45    [15169134]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
Glory,

мне бы хотелось, чтобы ppa.value = null, ppa.date_begin = null и date_end = null, если у меня отсутствуют записи.
Наведите на путь истинный (
21 ноя 13, 15:54    [15169236]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
dimkadv2
мне бы хотелось, чтобы ppa.value = null, ppa.date_begin = null и date_end = null, если у меня отсутствуют записи.

Как это может быть, если вы задали строгое соединение таблиц ?
21 ноя 13, 15:57    [15169253]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
Glory,

подскажите пожалуйста тогда, каким путем мне идти, чтобы отображались отсутствующие значения из Parametr.PAccount? Хранить пустые строки?
21 ноя 13, 16:02    [15169296]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
dimkadv2
подскажите пожалуйста тогда, каким путем мне идти, чтобы отображались отсутствующие значения из Parametr.PAccount? Хранить пустые строки?

значения в качестве null
21 ноя 13, 16:03    [15169304]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
BuKTaP
Member

Откуда:
Сообщений: 132
попробуйте
inner join Adress.Account

заменить на
left join Adress.Account
21 ноя 13, 16:05    [15169331]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
dimkadv2
Member

Откуда: Краснодар
Сообщений: 36
BuKTaP,

Уже пробовал, результат такой же
21 ноя 13, 16:07    [15169349]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Гость333
Member

Откуда:
Сообщений: 3683
dimkadv2
Гость333,

на "on" ругается(

Не верю. Запрос, который я предложил, синтаксически корректен, у меня он валится на разрешении имён (Invalid object name 'Parametr.List').
21 ноя 13, 16:08    [15169351]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
dimkadv2
Уже пробовал, результат такой же

Потому что where aa.Id = 1 все равно продолжает фильтровать _конечную выборку_
21 ноя 13, 16:08    [15169354]     Ответить | Цитировать Сообщить модератору
 Re: проблема с выборкой из нескольких таблиц  [new]
kill_zdm
Member

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

стесняюсь предложить поиграться с Right Join ... или Left Join но с пониманием того, где может быть несоответствие явному условию совпадения
21 ноя 13, 16:09    [15169366]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить