我偶然发现U-SQL有点问题,对我来说,这是一个我还没有找到解决方法的问题。
似乎U-SQL不支持任何其他内容,但在联接中==除外,因此不能将>或<放在联接本身中。
对于下面我在Oracle中所做的用例:
create table trf.test_1(
数字节点
;
插入trf.test_1值(10);
插入trf.test_1值(20);
插入trf.test_1值(30);
插入trf.test_1值(60);
删除表trf.test_2;
创建表trf.test_2(
数字节点
;
插入trf.test_2值(20);
插入trf.test_2值(30);
选择T1.number_col,T2.number_col
来自TRF.TEST U1 T1
在T1.number_col<T2.number_col上左连接trf.test_2 t2
;
< /代码>
我得到以下信息:

如果没有<联接,我如何在U-SQL中执行此操作?
我尝试了交叉联接,但是如果您在WHERE子句中包含<,它就会变成一个内部联接,并且您不会得到带有空值的行。
感谢您的任何想法。
T1时=
从中选择*
(值
(10)
(20)
(30)
(60)
)以t(num_col)表示;
@ T2=
从中选择*
(值
(20)
(30)
)以t(num_col)表示;
结果=
选择t1.num_col,t2.num_col作为num_col_2
从T1到T1
t2与t2交叉连接
其中T1.num_col<T2.num_col;
@结果2
选择t1.num_col,t2.num_col作为num_col_2
从T1到T1
左联接@result as t2 on t1.num_col==t2.num_col;
输出@结果2
到“/output/referenceguide/joins/examplea.csv”
使用outputters.csv();
< /代码>
编辑-我将@T1数据集的左联接添加回了@result集,这似乎有效,但如果有更好的解决方案,我会感兴趣。似乎有点麻烦。
对于下面我在Oracle中所做的用例:
create table trf.test_1(
number_col int
);
insert into trf.test_1 VALUES (10);
insert into trf.test_1 VALUES (20);
insert into trf.test_1 VALUES (30);
insert into trf.test_1 VALUES (60);
drop table trf.test_2;
create table trf.test_2(
number_col int
);
insert into trf.test_2 VALUES (20);
insert into trf.test_2 VALUES (30);
SELECT t1.number_col, t2.number_col
FROM trf.test_1 t1
LEFT JOIN trf.test_2 t2 ON t1.number_col < t2.number_col
;
我得到以下信息:

如果没有<联接,我如何在U-SQL中执行此操作?
我尝试了交叉联接,但是如果您在WHERE子句中包含<,它就会变成一个内部联接,并且您不会得到带有空值的行。
有什么好主意吗?
@t1 =
SELECT * FROM
( VALUES
(10),
(20),
(30),
(60)
) AS T(num_col);
@t2 =
SELECT * FROM
( VALUES
(20),
(30)
) AS T(num_col);
@result =
SELECT t1.num_col, t2.num_col AS num_col_2
FROM @t1 AS t1
CROSS JOIN @t2 AS t2
WHERE t1.num_col < t2.num_col;
@result2 =
SELECT t1.num_col, t2.num_col AS num_col_2
FROM @t1 AS t1
LEFT JOIN @result AS t2 ON t1.num_col == t2.num_col;
OUTPUT @result2
TO "/Output/ReferenceGuide/Joins/exampleA.csv"
USING Outputters.Csv();
编辑-我将@T1数据集的左联接添加回了@result集,这似乎有效,但如果有更好的解决方案,我会感兴趣。好像有点麻烦。