/ / Como encontro registros não utilizados usando uma associação externa? [duplicado] - sql, junção, junção externa

Como faço para encontrar registros não utilizados usando uma associação externa? [duplicado] - sql, join, outer-join

Dado, as seguintes tabelas:

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

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

Espero o seguinte resultado:

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

Como você faria isso usando uma associação externa?

Respostas:

1 para resposta № 1

A consulta a seguir faz exatamente o que foi solicitado:

SELECT rooms.*
FROM rooms
LEFT JOIN classes ON rooms.id = classes.room
WHERE
classes.room IS NULL;

Tentando explicar o que está acontecendo aqui:

Depois de se juntar à esquerda classes em rooms, você obtém este resultado:

+--------------------------------------------+
| LEFT JOINED                                |
+============================================+
| rooms.id    | classes.name | classes.room  |
+-------------+--------------+---------------+
| A1.01       | 1A           | A1.01         |
| A1.02       | NULL         | NULL          |
| A1.03       | 1C           | A1.03         |
+-------------+--------------+---------------+

Como a junção esquerda retorna todos registros da mesa esquerda (que é rooms), mesmo se rooms.id não combina classes.room uma vez que o último é nulo, o rooms colunas ainda serão retornadas. Pense nisso classes.name também é nulo, pois o registro não foi correspondido. Eu sei que isso é um pouco confuso para iniciantes. (Como eu, só queria compartilhar minha experiência. Desculpe por parecer um pouco confuso)

Como você pode ver, tudo o que precisa ser feito a partir daqui é filtrar o classes Onde room é nulo.

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