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

		// join [Orders] with [sub query]
		Odb.SQL.Select(x =>
				x.From(t0).Top(5)
				 .LeftJoin( sub_sql, sub_sql["Id"].ToInteger() == t0.OrderID )
				 .Fields( t0.OrderID, sub_sql["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_sql = Odb.SQL.Select(x =>
						x.From(t1).Fields( x[t1.OrderID].DISTINCT() )
					);

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