11.09.2020, 16:21 | #1 |
Участник
|
Условие с outer join
Здравствуйте.
Axapta 3.0. Нужна выборка из двух таблиц (объединение по полю Id). В выборку должны попасть все записи из Table1 и связанные из Table2. Использую объединение outer join. Нужно ещё чтобы в выборки были записи по условию Table1.Field1 == 3 или Table2.Field1 == 3. Пишу запрос select Id, Field1 from Table1 outer join Id, Field1 from Table2 where Table2.Id == Table1.Id && (Table2.Field1 == 3 || Table1.Field1 == 3) условие игнорируется пишу так select Id, Field1 from Table1 where Table1.Field1 == 3 outer join Id, Field1 from Table2 where Table2.Id == Table1.Id && Table2.Field1 == 3 выводятся записи только удовлетворяющие условию Table1.Field1 == 3 |
|
13.09.2020, 07:35 | #2 |
Участник
|
QueryRange и QueryFilter [AX2012]
Для тройки можно попробовать создать промежуточный View и фильтровать уже его Последний раз редактировалось S.Kuskov; 13.09.2020 в 07:38. |
|
13.09.2020, 15:32 | #3 |
Участник
|
Напишите в синтаксисе Select-SQL какой запрос Вы в итоге хотите получить. Из Вашего описания непонятно, что Вам требуется и в чем проблема. И Вам постараются "перевести" его в синтаксис X++, если это возможно
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
13.09.2020, 15:54 | #4 |
северный Будда
|
селектом такое вроде бы не сделать
попробуйте через кверю, так точно работает
__________________
С уважением, Вячеслав |
|
15.09.2020, 09:01 | #5 |
Участник
|
Цитата:
left join Table2 as t2 on t1.Id = t2.Id where (t1.Field1 = 3 or t2.Field1 = 3) |
|
15.09.2020, 11:47 | #6 |
Участник
|
Цитата:
Я не уверен, что такой запрос может быть реализован в Axapta. По крайней мере в одном запросе. Outer Join при конвертации в синтаксис SQL всегда оформляется как подзапрос. Поэтому и возникают сложности, если необходимо фильтровать результат, а не записи в самом подзапросе Однако если подойти чисто формально, то запрос можно разделить на два. Примерно так X++: // Сначала фильтр по t1.Field1 select t1.Id, t1.Field1, t2.Field1 from Table1 as t1 left join Table2 as t2 on t1.Id = t2.Id where t1.Field1 = 3 UNION // Теперь фильтр по t2.Field1, но здесь уже нет смысла в Left Join select t1.Id, t1.Field1, t2.Field1 from Table1 as t1 inner join Table2 as t2 on t1.Id = t2.Id where t2.Field1 = 3 Вот два последовательных запроса в Axapta сделать можно. Хотя, конечно, надо будет еще исключить возможные дубли, если в первый запрос уже попали записи, которые будут во втором. Ну, или в первом добавить фильтр на t2.Field1 <> 3
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|