Generally, AQL offers a very incomplete set of features. The AFL operators, though they may be harder to get used to at first, are the recommended way to go:

Try

```
filter(
cross_join(
F,
project(between(TEST2, 0,49), x)
),
F.i = x
)
```

Here, the cross_join output will be a two-dimensional array [F.i, TEST2.i]. It will return all combinations of F.i and TEST2.x that are equal. So if you have:

```
F:
{i} x
0, 1.3
1, 3.6
2, 7.5
TEST2:
{i} x, y, z, a, b, c
0, 0.0,...
1, 0.0,...
2, 1.0,..
3, 4.6,..
4, 2.0,..
```

The result will be

```
{F.i, TEST2.i} F.x, TEST2.x
0, 0, 1.3, 0.0
0, 1, 1.3, 0.0
1, 2, 3.6, 1.0
2, 4, 7.5, 2.0
```

Here is a much more efficient approach to consider. SciDB is a lot better at joining on dimensions:

```
join(
F,
redimension( apply( between( TEST2, 0, 49), j, iif( floor(x) = x and x >=0, int64(x), int64(null) ) ), <x:float> [j=0:*, 200000000,0] )
)
```

That code will return a 1D array (join is an intersect on dimensions which must match) like this:

```
{i} F.x, TEST2.x
0, 1.3, 0,
1, 3.6, 1,
2, 7.5, 2
```

So this relies on the fact that redim will ignore null inputs and we use the IIF to cast floats to null if they are not a whole number.

Make sense?