3

这是我的查询:

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 中的每个学生。如果我尝试在两个表上使用连接,它将返回 100 条记录(每个学生 10 条记录)。我想要的是,将连接返回的结果限制为每个学生 5 条记录因此,我应该为每个学生获得 5 条记录,因此 50 条输出行

表结构(资产):

ID | TypeID | CategoryID | Worth | isActive 
| CreationDate | ExpiryDate Value | AssetOwner 

表结构(用户活动) | ID | ActivityTypeID | UserID | Time | onAssetID | CommentID

注意:1)两个表的ID都是主键2)用户活动中的onAssetID和commentID是外键,引用资产表中的ID

如果您需要更多详细信息,请随时告诉我

4

4 回答 4

2

我正在尝试做什么?想象一下 Table1 有 10 个学生姓名,现在 Table2 有 10 条记录(行),用于 table1 中的每个学生。如果我尝试在两个表上使用连接,它将返回 100 条记录(每个学生 10 条记录)。我想要的是,将连接返回的结果限制为每个学生 5 条记录因此,我应该为每个学生获得 5 条记录,因此 50 条输出行

答案:- Table1(studentid,.......) Table2(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 | 类型ID | 类别ID | 值得 | 活跃 | 创建日期 | 到期日值 | AssetOwner 表结构(用户活动):| 身份证 | 活动类型ID | 用户名 | 时间 | 资产ID | 评论ID

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;
于 2013-06-09T14:24:31.203 回答
0

您将它们称为 a2.column_name 就像您将该查询称为 a2

于 2013-06-09T09:53:19.997 回答
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 总共只会返回三行,而不是每个连接三行。)

于 2013-06-09T14:46:12.637 回答
0

也许有一些方法可以在子查询中使用外部查询表别名 uning横向连接 https://vladmihalcea.com/sql-lateral-join/

于 2021-11-12T13:14:04.183 回答