INNER JOIN相同的表类别和子类别

时间:2013-04-16 15:25:44

标签: mysql inner-join

我需要在mysql表中进行内连接,但它是同一个表。

我有一个表类别: 该表的一个例子是:

id | id_lingua | id_registro | categoria | nivel
1    1           1             Pastas      0
2    2           1             Folders     0
3    3           1             Carpetas    0
4    1           2             Feminina    1
5    2           2             Women       1
6    3           2             Mujeres     1

nivel是定义它是类别还是子类别的关键,我需要列出这些类别,然后在包含id_registro父类别的字段中指定父类别级别。

我不知道我是否清楚,但内心如何加入这张表?

表格是:

id  id_lingua  id_registro  categoria  nivel
1   1          3            Pastas     0
2   2          3            Folders    0
3   3          3            Carpetas   0
4   1          4            Feminina   3
5   2          4            Women      3
6   3          4            Mujeres    3

并且咨询:

SELECT cat.*, parent.categoria as nome
FROM categorias cat
INNER JOIN categorias parent
ON cat.nivel=parent.id_registro
AND cat.id_lingua=2

返回:

id  id_lingua  id_registro  categoria  nivel  nome
5   2          4            Women      3      Pastas
5   2          4            Women      3      Folders
5   2          4            Women      3      Carpetas

1 个答案:

答案 0 :(得分:12)

我认为您需要LEFT JOIN(显示parent未获得匹配的行。)

您似乎也希望在id_lingua上匹配。

SELECT cat.*, parent.categoria as nome
FROM categorias cat
LEFT JOIN categorias parent
ON cat.nivel = parent.id_registro
  AND cat.id_lingua = parent.id_lingua
WHERE cat.id_lingua = 2

您可能还想添加IFNULL,因为parent.*NULL不匹配,看起来您希望显示Empty :(除非您的意思一个实际的空字符串)

SELECT cat.*, IFNULL(parent.categoria, 'Empty') as nome
FROM categorias cat
LEFT JOIN categorias parent
ON cat.nivel = parent.id_registro
  AND cat.id_lingua = parent.id_lingua
WHERE cat.id_lingua = 2

This answer可以很好地解释不同联接之间的区别:

Image