22.07.2004, 11:21 | #1 |
Участник
|
Не работают 2 notexists join
Проблема вот в чём:
В select е присутствуют сразу 2 notexists join PHP код:
Если же поменять местами PHP код:
Помогите, как побороть эту беду? Необходимо выбрать только те записи из table1 для которых нет аналогов ни в table2, ни в table3. |
|
22.07.2004, 13:10 | #2 |
Участник
|
можно сделать два select'a.
а еще можно left outer join и right outer join использовать (к сожалению, не помню, как аналоги называются). |
|
22.07.2004, 14:01 | #3 |
Участник
|
Цитата:
можно сделать два select'a.
т.к. к примеру в Table1 содержится 1; 2; 3; 4; 5. в Table2 содержится 2; 4. в Table2 содержится 3; 4. В результате должно получиться : 1; 5. |
|
22.07.2004, 14:18 | #4 |
Участник
|
По моему будет работать если сделать так:
while select table1 notexists join table2 where table2.field1 == table1.field1 notexists join table3 where table3.field1 == table2.field1 |
|
22.07.2004, 14:20 | #5 |
Участник
|
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.нужноеполе должно сработать. |
|
22.07.2004, 14:33 | #6 |
Участник
|
2 mtik
Цитата:
По моему будет работать если сделать так:
2 DavidA Вся идея была в том, что бы обойтись одним запросом, и средствами Аксапты. |
|
22.07.2004, 14:47 | #7 |
Участник
|
хм...
пришлите весь код запроса. |
|
22.07.2004, 14:56 | #8 |
Участник
|
Цитата:
пришлите весь код запроса.
|
|
22.07.2004, 15:02 | #9 |
Модератор
|
Не будут правильно работать ни два notexists join, ни два outer join к одной таблице - смотрите на формируемый запрос
|
|
22.07.2004, 15:15 | #10 |
Участник
|
В SQL'е я бы предложил связывать таблицы по inner join, благо есть общие поля, а все условия выборки переносить в where. Уверен, что и в X++ следует использовать подобный механизм.
|
|
22.07.2004, 16:11 | #11 |
Участник
|
2DavidA
Цитата:
В SQL'е я бы предложил
Проблема состоит в том что Аксапта не корректно формирует запрос для SQL'а . А точнее не правильно расставляет скобки. Вот что показали иследования: после того как будет встречена конструкция notexists join и потом следуют другие join'ы Аксапта помещает селекты относящиеся к этим join'ам в скобки первого notexists join. |
|
22.07.2004, 16:22 | #12 |
Участник
|
Любопытное сведение. Спасибо, что раскопали.
то есть если написать while select table1 notexists join table2 where table2.field1 == table1.field1 && table3.field1 == table1.field1 notexists join table3 то пройдет выборка по трем таблицам? |
|
22.07.2004, 16:32 | #13 |
Участник
|
Нет!
Второй notexists не будет выполняться. |
|
23.07.2004, 13:49 | #14 |
Участник
|
Эта бага еще со времен 2.1 висит.
Средствами ахарты ветвящиеся запросы не иннер джойн НЕ СТРОЯТСЯ.
Только плоские. т.е. можно попробовать как - нибудь развернуть этот запрос в цепочку таб2 - таб1 - таб3 пытайтесь.... Альтернатеива одна - временная таблица. |
|
|
За это сообщение автора поблагодарили: savel (1). |