高效执行SQL左连接,预先筛选表数据
在处理多个表时,通常需要在连接表之前先对其中一个表进行筛选。本例涉及两个表:客户表 (Customer) 和条目表 (Entry)。
目标是在执行这两个表之间的左连接之前,先根据特定类别 'D' 筛选条目表。预期结果是:无论条目表中是否存在相关记录,都检索客户表中的所有记录;同时,排除条目表中不符合类别条件的记录。
以下SQL查询演示了如何实现这一点:
<code class="language-sql">SELECT c.Customer, c.State, e.Entry FROM Customer c LEFT JOIN Entry e ON c.Customer=e.Customer AND e.Category='D'</code>
通过将WHERE筛选条件移至JOIN条件中,我们可以在连接之前对条目表应用类别筛选。这确保只有符合类别条件的条目记录包含在连接结果中。
示例表
<code>客户表 (Customer): ╔══════════╦═══════╗ ║ Customer ║ State ║ ╠══════════╬═══════╣ ║ A ║ S ║ ║ B ║ V ║ ║ C ║ L ║ ╚══════════╩═══════╝ 条目表 (Entry): ╔══════════╦═══════╦══════════╗ ║ Customer ║ Entry ║ Category ║ ╠══════════╬═══════╬══════════╣ ║ A ║ 5575 ║ D ║ ║ A ║ 6532 ║ C ║ ║ A ║ 3215 ║ D ║ ║ A ║ 5645 ║ M ║ ║ B ║ 3331 ║ A ║ ║ B ║ 4445 ║ D ║ ╚══════════╩═══════╩══════════╝</code>
结果
<code>╔══════════╦═══════╦═══════╗ ║ Customer ║ State ║ Entry ║ ╠══════════╬═══════╬═══════╣ ║ A ║ S ║ 5575 ║ ║ A ║ S ║ 3215 ║ ║ B ║ V ║ 4445 ║ ║ C ║ L ║ NULL ║ ╚══════════╩═══════╩═══════╝</code>
总之,通过在JOIN条件中使用AND子句,我们可以在连接表之前对其进行筛选,从而根据指定的条件更精确地检索数据。
以上是如何在 SQL 中对预过滤表执行左连接?的详细内容。更多信息请关注PHP中文网其他相关文章!