1

我需要在 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 的字段中指定父类别级别。

不知道是不是我说清楚了但是怎么inner join这个表呢?

表格是:

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
4

1 回答 1

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

这个答案有一张很好的图片解释了不同连接之间的区别:

图片

于 2013-04-16T15:37:24.083 回答