何时使用LEFT JOIN和何时使用INNER JOIN?
我感觉好像总是被教导要使用LEFT JOIN
s,并且我经常看到它们与INNER
s
混合使用,以在应该在不同页面上执行相同操作的几段代码中完成相同类型的查询。开始:
SELECT ac.reac, pt.pt_name, soc.soc_name, pt.pt_soc_codeFROM
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 countFROM 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