【问题标题】:"limit" clause on joining?加入的“限制”条款?
【发布时间】:2011-11-10 19:14:26
【问题描述】:

表1:

id , otherColumn, otherColumn2 ...

表2:

id, table1_id, someOtherColumns...

I.E.一对多关系

一个简单的连接是:

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

我想做一些不同的事情:对于 table1 中的每一行,从 table2 中提取最多 1 行,无论是否有多个候选人。就像我可以限制常规选择的结果数量一样

这可能吗?怎么样?

【问题讨论】:

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


【解决方案1】:

可能性:

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

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

并且一如既往地验证结果并在必要时运行性能测试。

编码愉快。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多