2

我正在尝试根据它们是否匹配多对多关系中的给定对来组合两个表。我已经知道我正在尝试生成的 SQL 语句,它在功能上等同于以下内容:

SELECT columnA, columnB, ...
...
JOIN matching_table
    ON ( (matching_table.id1 = table_a.id AND matching_table.id2 = table_b.id) OR
         (matching_table.id1 = table_b.id AND matching_table.id2 = table_a.id) )
...

但我想使用 Kohana 的查询生成器来生成它以保持一致性。问题是我似乎找不到创建复杂ON查询的方法。到目前为止我所拥有的是

DB::select('columnA', 'columnB', ...)
...
    ->join('matching_table')
        ->on('matching_table.id1', '=', 'table_a.id')
        ->on('matching_table.id2', '=', 'table_b.id')
...

这会生成第一个AND序列,但我似乎无法将它与OR.

有什么建议么?

4

1 回答 1

0

您应该能够使用 where 而不是 on (虽然未经测试):

->join('matching_table')
->where_open()
->where('matching_table.id1', '=', 'table_a.id')
->and_where('matching_table.id2', '=', 'table_b.id')
->where_close()
->or_where_open()
->where('matching_table.id1', '=', 'table_b.id')
->and_where('matching_table.id2', '=', 'table_a.id')
->or_where_close()
于 2012-10-26T08:53:45.123 回答