何时使用LEFT JOIN和何时使用INNER JOIN?

我感觉好像总是被教导要使用LEFT JOINs,并且我经常看到它们与INNERs

混合使用,以在应该在不同页面上执行相同操作的几段代码中完成相同类型的查询。开始:

SELECT ac.reac, pt.pt_name, soc.soc_name, pt.pt_soc_code

FROM

AECounts ac

INNER JOIN 1_low_level_term llt on ac.reac = llt.llt_name

LEFT JOIN 1_pref_term pt ON llt.pt_code = pt.pt_code

LEFT JOIN 1_soc_term soc ON pt.pt_soc_code = soc.soc_code

LIMIT 100,10000

那就是我正在从事的工作:

我看到很多像:

SELECT COUNT(DISTINCT p.`case`) as count

FROM FDA_CaseReports cr

INNER JOIN ae_indi i ON i.isr = cr.isr

LEFT JOIN ae_case_profile p ON cr.isr = p.isr

似乎LEFT也可能是INNER,有没有抓住的机会?

回答:

有收获吗?是的-左联接是外联接的一种形式,而内联接是内联接的一种形式。

这是显示差异的示例。我们将从基本数据开始:

mysql> select * from j1;

+----+------------+

| id | thing |

+----+------------+

| 1 | hi |

| 2 | hello |

| 3 | guten tag |

| 4 | ciao |

| 5 | buongiorno |

+----+------------+

mysql> select * from j2;

+----+-----------+

| id | thing |

+----+-----------+

| 1 | bye |

| 3 | tschau |

| 4 | au revoir |

| 6 | so long |

| 7 | tschuessi |

+----+-----------+

在这里,我们将看到内部联接和左联接之间的区别:

mysql> select * from j1 inner join j2 on j1.id = j2.id;

+----+-----------+----+-----------+

| id | thing | id | thing |

+----+-----------+----+-----------+

| 1 | hi | 1 | bye |

| 3 | guten tag | 3 | tschau |

| 4 | ciao | 4 | au revoir |

+----+-----------+----+-----------+

嗯,三排。

mysql> select * from j1 left join j2 on j1.id = j2.id;

+----+------------+------+-----------+

| id | thing | id | thing |

+----+------------+------+-----------+

| 1 | hi | 1 | bye |

| 2 | hello | NULL | NULL |

| 3 | guten tag | 3 | tschau |

| 4 | ciao | 4 | au revoir |

| 5 | buongiorno | NULL | NULL |

+----+------------+------+-----------+

哇,五排!发生了什么?

外部联接(例如left join保留不匹配的行)-因此ID为2和5的行由左联接查询保留。其余的列用NULL填充。

换句话说,左连接和内部连接不可互换。

以上是 何时使用LEFT JOIN和何时使用INNER JOIN? 的全部内容, 来源链接: utcz.com/qa/431509.html

回到顶部