如何使用外部联接查找未使用的记录?

时间:2017-04-26 18:23:19

标签: sql join outer-join

鉴于,以下表格:

genes[, colnames(genes) %in% phenodf$ID]

我希望得到以下结果:

+--------------+
| CLASSES      |
+==============+
| name | room  |
+------+-------+
| 1A   | A1.01 |
| 1B   | NULL  |
| 1C   | A1.03 |
+------+-------+

+-------+
| ROOMS |
+=======+
| id    |
+-------+
| A1.01 |
| A1.02 |
| A1.03 |
+-------+

如何使用外部加入完成此操作?

1 个答案:

答案 0 :(得分:1)

以下查询完全符合要求:

+--------------+
| UNUSED ROOMS |
+==============+
| id           |
+--------------+
| A1.02        |
+--------------+

试着解释这里发生的事情:

SELECT rooms.* FROM rooms LEFT JOIN classes ON rooms.id = classes.room WHERE classes.room IS NULL; 上左加入classes后,您会得到以下结果:

rooms

由于Left Join返回左表(+--------------------------------------------+ | LEFT JOINED | +============================================+ | rooms.id | classes.name | classes.room | +-------------+--------------+---------------+ | A1.01 | 1A | A1.01 | | A1.02 | NULL | NULL | | A1.03 | 1C | A1.03 | +-------------+--------------+---------------+ )的所有记录,即使roomsrooms.id不匹配,因为后者为null,仍会返回classes.room列。请注意rooms也为空,因为记录不匹配。我知道这对初学者来说有点混乱。 (就像我一样,我只想分享我的经历。抱歉听起来有些困惑。)

正如您所看到的,从这里需要完成的所有操作就是过滤掉classes.name,其中classes为空。

room