如何在代码中建立或处理数据?

问题描述 投票:0回答:1

我有两个桌子。我们称它们为Table1和Table2。我需要在代码查询中创建类似。

Select * from Table1 
    exists join Table2 where 
    Table1.Key == Table2.Key &&
    (Table1.A == '1' || Table2.C == '2')

所以转移到我尝试过的代码:

Query                   q;
QueryBuildDataSource    qbd;
QueryBuildDataSource    ofQbds;
QueryBuildRange         qbr;
str range;
Table1 test;    
QueryRun                    qr;

q = new Query();
qbd = q.addDataSource(tableNum(Table1));
qbd .name('Table1');
ofQbds = qbd.addDataSource(tableNum(Table2));
ofQbds.name('Table2');
ofQbds.addLink(fieldNum(Table1, Key), fieldNum(Table2, Key));

ofQbds.joinMode(JoinMode::InnerJoin);
range = strFmt('%1.%2 == %3 OR %4.%5 == %6', qbd.name(), 'A', '1', 
ofQbds.name(), 'C', '5');
info(range);    
ofQbds.addRange(fieldName2id(tableNum(Table1 ), 'A')).value(range);
qr = new QueryRun(q);
while (qr.next())
{
    test = qr.get(test.TableId);
    info(test.A + ','+test.Key);
}
info('done');

但是or条件不能正常工作。例如,如果我有值

Table1
A,Key
1,1
2,2
3,3

Table2
C,Key
2,2

我希望表1有2个结果

1,1
2,2

但是我只有第一个]

Message 
Table1.A == 1 OR Table2.C == 2
2,2
done

我尝试了不同的joinModes和切换||和或,但我没有尝试过。

我需要更改什么才能在代码中具有条件?

我有两个桌子。我们称它们为Table1和Table2。我需要在代码查询中创建类似。从表1中选择*存在表1。键==表2。

尝试更改此行:
range = strFmt('%1.%2 == %3 OR %4.%5 == %6', qbd.name(), 'A', '1', ofQbds.name(), 'C', '5');

range = strFmt('((%1.%2 == %3) || (%4.%5 == %6))', qbd.name(), 'A', '1', ofQbds.name(), 'C', '5');

不要使用sql“或”,而是使用x ++“ ||”

编辑:有关更多信息,请参见http://www.axaptapedia.com/Expressions_in_query_ranges

axapta x++
1个回答
2
投票
© www.soinside.com 2019 - 2024. All rights reserved.