MySQL将一个表连接到自身

Lui*_*uis 1 mysql join

请考虑下表'mmm':

select * from mmm;
Run Code Online (Sandbox Code Playgroud)

输出:

+-------+-------+------+  
| texto | value | n    |  
+-------+-------+------+  
| aaa   |    10 | 1    |  
| aab   |    10 | 1    |  
| aaa   |    11 | 1    |  
| aab   |    11 | 1    |  
| aaa   |    10 | 2    |  
+-------+-------+------+  
Run Code Online (Sandbox Code Playgroud)

命令:

select a.*, '--', b.* 
  from mmm a 
left join mmm b on (a.n=b.n) 
where  a.value < b.value 
  and a.texto ='aaa' 
  and b.texto='aab';
Run Code Online (Sandbox Code Playgroud)

收益:

+-------+-------+------+----+-------+-------+------+  
| texto | value | n    | -- | texto | value | n    |  
+-------+-------+------+----+-------+-------+------+  
| aaa   |    10 | 1    | -- | aab   |    11 | 1    |  
+-------+-------+------+----+-------+-------+------+  
Run Code Online (Sandbox Code Playgroud)

没关系.但我想要的是:

+-------+-------+------+----+-------+-------+------+  
| texto | value | n    | -- | texto | value | n    |  
+-------+-------+------+----+-------+-------+------+  
| aaa   |    10 | 1    | -- | aab   |    11 | 1    |  
+-------+-------+------+----+-------+-------+------+  
| aaa   |    10 | 2    | -- | NULL  |  NULL | NULL |  
+-------+-------+------+----+-------+-------+------+  
Run Code Online (Sandbox Code Playgroud)

Mar*_*tin 6

select a.*, '--', b.* 
  from mmm a 
left join mmm b on (a.n=b.n) 
where  (a.value < b.value or b.value is null)
  and a.texto ='aaa' 
  and (b.texto='aab' or b.textto is null);
Run Code Online (Sandbox Code Playgroud)

要么:

select a.*, '--', b.* 
  from mmm a 
left join mmm b on (a.n=b.n and a.value < b.value and b.texto = 'aab') 
where a.texto ='aaa' ;
Run Code Online (Sandbox Code Playgroud)