在下面的查询中,“id1”和“id2”都是未知的,无论我将它们更改为“myTable.id1”或“r1.id1”或“r2.id1”:
SELECT @n:=@n+1 AS id1,myTable.originalID,myTable.name,myTable.place
FROM (myTable, (SELECT @n:=0) r1)
LEFT JOIN (SELECT @i:=@i+1 AS id2,originalID,name,place FROM (myTable, (SELECT @i:=0) r2) WHERE originalID!=12) secondTable
ON id1=id2;
我能做什么?
最佳答案
它们是未知的,因为查询中唯一已知的列(作为一般规则)是 from
子句中的列。您在 select
子句中定义它们。尝试将变量放入子查询中,例如:
select *
from (select @n := @n + 1 AS id1, mt.originalID, mt.name, mt.place
from myTable mt cross join
(select @n := 0) const
) t1 left join
(SELECT @i := @i + 1 AS id2, originalID, name, place
FROM myTable cross join
(SELECT @i:=0) r2
WHERE originalID <> 12
) secondTable
ON t1.id1 = secondtable.id2;
关于mysql - 如何让MySQL知道顺序查询引起的ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21760856/