서브 쿼리 (Sub query)

서브 쿼리를 위한 함수는 2개가 준비되어 있습니다.

$this->qb->startSubQuery()

이 함수는 서브 쿼리를 시작하기 위하여 반드시 호출되어야 합니다.

$this->qb->endSubQuery()

이 함수는 서브 쿼리를 얻기 위하여 호출합니다.

Select

$this->qb
    ->select($this->qb
        ->startSubQuery('name')
        ->select('name')
        ->from('myTable')
        ->where('id', 'memberTable.id', false)
        ->endSubQuery()
        , false)
    ->from('memberTable')
    ->where('id', 1)
    ->exec();

// Produces:
//
//      SELECT (SELECT `name`
//      FROM `myTable`
//      WHERE id =  memberTable.id) AS name
//      FROM `memberTable`
//      WHERE `id` = 1

Where

$this->qb
    ->select('name')
    ->from('memberTable')
    ->where('id in ',
        $this->qb
        ->startSubQuery()
        ->select('id')
        ->from('myTable')
        ->where('id > ', 100)
        ->endSubQuery(), false
    )
    ->exec();

// Produces:
//
//      SELECT `name`
//      FROM `memberTable`
//      WHERE id in  (SELECT `id`
//      FROM `myTable`
//      WHERE `id` > 100)

From

$this->qb
    ->from($this->qb
        ->startSubQuery('tmpTable')
        ->select('id')
        ->from('myTable')
        ->where('id > ', 100)
        ->endSubQuery()
    )
    ->exec()

// Produces:
//
//      SELECT *
//      FROM (SELECT `id`
//      FROM `myTable`
//      WHERE `id` > 100) AS tmpTable