3

副選択に対してを行うクエリがありますLEFT JOIN。このクエリは高負荷環境で実行され、設定された要件内で実行されます。クエリ(非常に単純化された)は次のようになります。

SELECT
  table_A.pKey
, table_A.uKey
, table_A.aaa
, table_B.bbb
, alias_C.ccc
, alias_C.ddd
FROM table_A
INNER JOIN table_B ON table_A.pKey = table_B.pKey
LEFT JOIN (

    SELECT
      table_X.pKey
    , table_X.ccc
    , table_Y.ddd
    FROM table_X
    INNER JOIN table_Y ON table_X.pKey = table_Y.pKey

  ) AS alias_C ON table_A.uKey = alias_C.pKey;

(さまざまな理由により、副選択を(直接)左結合として書き換えることはできません)。

現在、を使用できませLEFT JOIN on subselectZend_Db_Select。思いついたすべてのことを試しましたが、うまくいきません。


だから私の質問は:

  • 上記のようにクエリを実行することはできません Zend_Db_Selectか?
  • Zend Framework内で機能させるにはどのような構文が必要ですか?
4

2 に答える 2

8

私はそれがこのように機能するはずだと思います:

$subselect = $db->select->from(array('x' => 'table_X'), array('x.pKey', 'x.ccc', 'y.ddd'), 'dbname')
                        ->join(array('Y' => 'table_Y'), 'x.pkey = y.pkey', array(), 'dbname');

$select = $db->select->from(array('a' => 'table_A'), array(/*needed columns*/), 'dbname')
                     ->join(array('b' => 'table_B'), 'a.pkey = b.pkey', array(), 'dbname')
                     ->joinLeft(array('c' => new Zend_Db_Expr('('.$subselect.')'), 'c.pkey = a.ukey', array())

試したことはありませんが、うまくいくと思います。

于 2011-07-12T11:34:59.660 に答える
1

...-> joinLeft(array('c' => new Zend_Db_Expr('('。$ subselect-> assemble()。')')、'c.pkey = a.ukey'、array())

于 2011-07-18T16:29:44.627 に答える