首页 > 解决方案 > mysql LEFT JOIN 在行号上

问题描述

我有这两张桌子

*tableA
id - name
1  - a
2  - b

*tableB
col - name
a  - red
b  - green
b  - white
a  - black

在这个查询中

SELECT a.id
     , a.name
     , b.name 
  FROM tableA a 
  LEFT 
  JOIN tableB b 
    ON A.name = B.id

我有

1 - a - black
1 - a - red
2 - b - green
2 - b - white

现在我想加入另一个 tableC,根据位置获取前 4 个元素

tableC
pos - name
1 - first
2 - second
3 - third
4 - fourth
5 - fifth

有这个结果

1 - a - black - first
1 - a - red - second
2 - b - green - third
2 - b - white - fourth

如何使用 rowNumber -> tableC.pos 加入最后一个表

标签: mysqljoin

解决方案


尝试向您的第一个查询添加一个行号,如下所示,并在加入 tableC 时使用它:

DECLARE @row_number int := 0;

select t.*, c.name
from (
       SELECT a.id, a.name, b.name, (@row_number:=@row_number + 1) AS rn 
       FROM tableA a 
       LEFT JOIN tableB b ON A.name = B.col
) t
left join tableC c on c.pos = t.rn

推荐阅读