我需要在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
答案 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可以很好地解释不同联接之间的区别: