to use the result column(s) of sub-select in another query expression; name or index can be specified.
Following section demonstrates using SUB SELECT clause.
		// Table Aliases
        var t0 = new Orders().AsQueryable();
        var t1 = new OrderDetails().AsQueryable();
		
		// query for the max [OrderDetailId] grouped by [OrderId]
		var sub_select = Odb.SQL.Select(x =>
						    x.From(t1)
						     .GroupBy(t1.OrderID)
						     .Fields( 
                                    x[t1.OrderID].AS("Id"), 
                                    x[t1.OrderDetailID].MAX().AS("LastDetailId")
                            )
					    );

		// Query (join [Orders] with [sub query])
        var query = Odb.SQL.Select(x =>
				x.From(t0).Top(5)
				 .LeftJoin( {{hl}}sub_select, sub_select["Id"].ToInteger() == t0.OrderID{{/hl}} )
				 .Fields( t0.OrderID, sub_select["LastDetailId"] )
		);
	
SELECT t2.OrderID,
t1.LastDetailId
FROM [Orders] AS t2
LEFT JOIN (
SELECT
t0.OrderID AS Id,
MAX(t0.OrderDetailID) AS LastDetailId
FROM [OrderDetails] AS t0
GROUP BY t0.OrderID
) AS t1 ON t1.Id = t2.OrderID
ORDER BY (SELECT NULL)
QHUpM8


Following section demonstrates using SUB SELECT in a WHERE block.
		var sub_select = Odb.SQL.Select(x =>
						x.From(t1).Fields( x[t1.OrderID].DISTINCT() )
					);

		Odb.SQL.Select(x => 
                        x.From(t0)
                         .Where( {{hl}}x[t0.OrderID].IN(sub_select)){{/hl}} );
	
SELECT *
FROM [Orders] AS t0
WHERE t0.OrderID IN ( SELECT DISTINCT(t1.OrderID) FROM [OrderDetails] AS t1 )
QHUpM8