这是我的问题:
select uact.onAssetID as AssetID, a1.value as AssetValue,
uact.CommentID, a2.value from useractivity uact inner join asset a1 on
uact.onAssetID=a1.ID inner join (select * from asset inner join
useractivity on uact.onAssetID=a1.ID group by a1.ID limit 3) a2 on
uact.CommentID=a2.ID;
Error: ERROR 1054 (42S22): Unknown column 'uact.onassetID' in 'on clause'
我在尝试做什么? 想象一下Table1有10个学生姓名,现在Table2有10个记录(行),每个学生都在table1中。如果我尝试在两个表上使用join,它将返回100条记录(每个学生10条记录)。我想要的是,每个学生限制连接返回的结果5个记录 所以,我应该为每个学生获得5条记录,因此输出50行
表格结构(资产):
ID | TypeID | CategoryID | Worth | isActive
| CreationDate | ExpiryDate Value | AssetOwner
表格结构(使用率)
| ID | ActivityTypeID | UserID | Time | onAssetID | CommentID
注意: 1)两个表的ID是主键 2)useractivity中的onAssetID和commentID是指在资产表
中引用ID的外键如果您需要更多详细信息,请随时与我们联系
答案 0 :(得分:2)
我在尝试做什么?想象一下Table1有10个学生姓名, 现在有Table2,每个学生有10条记录(行) 见表1。如果我尝试在两个表上使用join,它将返回 100条记录(每个学生10条记录)。我想要的是限制 每个学生加入5条记录返回的结果所以,我应该得到5分 每个学生的记录因此50行输出
回答这个问题: - 表1(studentid,.......) 表2(ID,.........,studentid)
select s.*,temp.* from (SELECT @var:=if(@var2= a.studentid,@var+1,1) sno, @var2:= studentid, a.*
FROM Table2 a,(select @var:=0) b, (select @var2:=0) c
order by studentid) temp, Table1 s where temp.sno<=5;
对于您的表结构: - 表结构(资产):ID | TypeID | CategoryID |值得的isActive | CreationDate | ExpiryDate值| AssetOwner表结构(使用率):| ID | ActivityTypeID | 用户ID |时间| onAssetID | CommentID
select s.*,temp.*
from
(SELECT @var:=if(@var2= a.onAssetID,@var+1,1) sno, @var2:= onAssetID, a.*
FROM useractivity a,(select @var:=0) b, (select @var2:=0) c
order by onAssetID) temp, asset s
where temp.sno<=5;
答案 1 :(得分:0)
您将其称为a2.column_name,因为您已调用该查询a2
答案 2 :(得分:0)
您应该可以这样做,但前提是您将其放在正确的细分中。请注意,在FROM子查询中这样做会严重妨碍性能。
无论如何,您的问题似乎是您引用了uact
和a1
未定义的地方,这是违反语法的行为。将别名添加到子查询中,如果需要,请在WHERE
子句中引用外部查询。
更改
(
SELECT *
FROM asset
INNER JOIN useractivity ON uact.onAssetID=a1.ID
GROUP BY a1.ID
LIMIT 3
) a2
到
(
SELECT ID, Value
FROM asset AS a
INNER JOIN useractivity AS ua
ON ua.onAssetID=a.ID
) a2
(请注意,您的LIMIT
子句将适用于 ENTIRE 查询,而a2只会返回三行,而不是每个连接三行。)