AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 22.07.2004, 11:21   #1  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Join Date: 26.02.2004
Location: Санкт-Петербург
Не работают 2 notexists join
Проблема вот в чём:
В select е присутствуют сразу 2 notexists join
PHP Code:
while select table1
             notexists join table2 where table2
.field1 == table1.field1
             notexists join table3 where table3
.field1 == table1.field1
{
   ......

так вот, выбираются только те записи из table1 которых нет в table2, а table3 совсем не принимается во внимание таблица table3.
Если же поменять местами
PHP Code:
while select table1
            notexists join table3 where table3
.field1 == table1.field1
            notexists join table2 where table2
.field1 == table1.field1
{
   ......

будут выбраны записи из table1 которых нет в table3, и уже не воспринимается table2.
Помогите, как побороть эту беду?
Необходимо выбрать только те записи из table1 для которых нет аналогов ни в table2, ни в table3.
Old 22.07.2004, 13:10   #2  
DavidA is offline
DavidA
Участник
 
12 / 10 (1) +
Join Date: 20.07.2004
Location: Москва
можно сделать два select'a.
а еще можно left outer join и right outer join использовать (к сожалению, не помню, как аналоги называются).
Old 22.07.2004, 14:01   #3  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Join Date: 26.02.2004
Location: Санкт-Петербург
Quote:
можно сделать два select'a.
Не поможет 2 отдельных селекта.
т.к.
к примеру
в Table1 содержится 1; 2; 3; 4; 5.
в Table2 содержится 2; 4.
в Table2 содержится 3; 4.
В результате должно получиться : 1; 5.
Old 22.07.2004, 14:18   #4  
mtik is offline
mtik
Участник
 
15 / 10 (1) +
Join Date: 22.07.2004
Location: г.Москва
По моему будет работать если сделать так:



while select table1


notexists join table2 where table2.field1 == table1.field1


notexists join table3 where table3.field1 == table2.field1
Old 22.07.2004, 14:20   #5  
DavidA is offline
DavidA
Участник
 
12 / 10 (1) +
Join Date: 20.07.2004
Location: Москва
1. создаем временную табличку

create #temptable
{
field1 nvarchar (20)
}

2. запускаем первый селект

insert into #temptable (field1)
select нужноеполе
from table t1 inner join table1 t2
where t1.нужноеполе != t2.нужноеполе

3. запускаем второй селект
select нужноеполе
from #temptable t3 inner join table t2
where t3.нужноеполе != t2.нужноеполе

должно сработать.
Old 22.07.2004, 14:33   #6  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Join Date: 26.02.2004
Location: Санкт-Петербург
2 mtik
Quote:
По моему будет работать если сделать так:
Проверил, к сожалению результат тот же - второй notexists join не воспринимается.

2 DavidA
Вся идея была в том, что бы обойтись одним запросом, и средствами Аксапты.
Old 22.07.2004, 14:47   #7  
DavidA is offline
DavidA
Участник
 
12 / 10 (1) +
Join Date: 20.07.2004
Location: Москва
хм...
пришлите весь код запроса.
Old 22.07.2004, 14:56   #8  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Join Date: 26.02.2004
Location: Санкт-Петербург
Quote:
пришлите весь код запроса.
Так ведь запрос, который, как я считаю, работает не правильно, я привёл выше.
Old 22.07.2004, 15:02   #9  
Vadik is offline
Vadik
Модератор
Vadik's Avatar
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Join Date: 18.11.2002
Location: гражданин Москвы
Не будут правильно работать ни два notexists join, ни два outer join к одной таблице - смотрите на формируемый запрос
Old 22.07.2004, 15:15   #10  
DavidA is offline
DavidA
Участник
 
12 / 10 (1) +
Join Date: 20.07.2004
Location: Москва
В SQL'е я бы предложил связывать таблицы по inner join, благо есть общие поля, а все условия выборки переносить в where. Уверен, что и в X++ следует использовать подобный механизм.
Old 22.07.2004, 16:11   #11  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Join Date: 26.02.2004
Location: Санкт-Петербург
2DavidA
Quote:
В SQL'е я бы предложил
Так в SQL'e будут работать без проблем и 2 и 3 и более NOT EXISTS.
Проблема состоит в том что Аксапта не корректно формирует запрос для SQL'а . А точнее не правильно расставляет скобки.
Вот что показали иследования:
после того как будет встречена конструкция notexists join и потом следуют другие join'ы Аксапта помещает селекты относящиеся к этим join'ам в скобки первого notexists join.
Old 22.07.2004, 16:22   #12  
DavidA is offline
DavidA
Участник
 
12 / 10 (1) +
Join Date: 20.07.2004
Location: Москва
Любопытное сведение. Спасибо, что раскопали.

то есть если написать

while select table1
notexists join table2 where table2.field1 == table1.field1 && table3.field1 == table1.field1
notexists join table3

то пройдет выборка по трем таблицам?
Old 22.07.2004, 16:32   #13  
savel is offline
savel
Участник
 
74 / 13 (1) ++
Join Date: 26.02.2004
Location: Санкт-Петербург
Нет!
Второй notexists не будет выполняться.
Old 23.07.2004, 13:49   #14  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Join Date: 26.02.2002
Location: СПб
Эта бага еще со времен 2.1 висит.
Средствами ахарты ветвящиеся запросы не иннер джойн НЕ СТРОЯТСЯ.
Только плоские.
т.е. можно попробовать как - нибудь развернуть этот запрос в цепочку
таб2 - таб1 - таб3

пытайтесь....

Альтернатеива одна - временная таблица.
This post has been rated by: savel (1).
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
AX UK: Join the Virtual Partner Community Blog bot DAX Blogs 0 26.03.2008 04:17
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22
Проблема с Exists Join Morpheus DAX: Программирование 5 14.08.2006 18:22
2 и более OUTER JOIN к одному паренту Ronin DAX: Программирование 21 19.12.2005 13:42

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 17:31.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.