加入自我表并获取新行中的值

时间:2018-11-20 22:58:16

标签: mysql sql join inner-join

我想知道是否有一种方法可以联接一个self表,然后在新行中获取这些值。

原始表与此类似:

| id | slug    | parent_id |
|----|---------|-----------|
| 1  | one     | NULL      |
| 2  | two     | 1         | 

我从可能包含N条JOIN语句的代码动态生成此查询:

SELECT * FROM `permalinks` 
  INNER JOIN `permalinks` AS `permalinks1` 
    ON `permalinks`.`id` = `permalinks1`.`parent_id` 
        AND `permalinks1`.`slug` = 'two' 
  WHERE `permalinks`.`slug` = 'one'

这将产生:

| id | slug    | id | slug   |  
|----|---------|----|--------|
| 1  | one     | 2  | two    |

但是我想得到:

| id | slug    |
|----|---------|
| 1  | one     |
| 2  | two     |

是否可以将所有新的联接值作为新行获得?

1 个答案:

答案 0 :(得分:0)

可以通过两次相同的查询进行细微的调整并在合并后生成行来完成

SELECT perm.Id, perm.slug FROM permalinks as perm
  INNER JOIN permalinks AS permalinks1 
    ON perm.id = permalinks1.parent_id 
        AND permalinks1.slug = 'two' 
  WHERE perm.slug = 'one'
  union
SELECT permalinks1.Id, permalinks1.slug FROM permalinks as perm
  INNER JOIN permalinks AS permalinks1 
    ON perm.id = permalinks1.parent_id 
        AND permalinks1.slug = 'two' 
  WHERE perm.slug = 'one';