加入“限制”条款?

时间:2011-09-05 18:00:52

标签: mysql join greatest-n-per-group

表1:

id , otherColumn, otherColumn2 ...

表2:

id, table1_id, someOtherColumns...

即。一对多关系

琐碎的联接将是:

select * from table1 left outer join table2 on table2.table1_id=table1.id;

我想做一些不同的事情:对于table1中的每一行,最多只能从table2中获取1行,如果有多个候选者则无论如何。正如我可以限制常规选择的结果数量

这可能吗?怎么样?

1 个答案:

答案 0 :(得分:1)

的可能性:

  1. 使用子选择。这将强制限制内部结果集。优点是可以使用分组/聚合操作。 (我不确定MySQL有什么问题,如果有的话,有子选择和整体查询计划。)

  2. 在主语句中使用WHERE并让SQL引擎“做它的事情”。如果WHERE可以在连接之前“移动”,则智能引擎将这样做,因为它将导致更少的行被处理。我认为这是基本的关系代数模型的一部分(对于独立的记录),但我不确定。查看查询计划。 (我不使用MySQL,所以我知道做了哪些优化。)

  3. 并且,如果重要的话,一如既往地验证结果并运行性能测试。

    快乐的编码。