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'

私は何をしようとしていますか?10 人の学生の名前を持つ Table1 があるとします。ここでは、table1 に存在する学生ごとに 10 のレコード (行) を持つ Table2 があります。両方のテーブルで結合を使用しようとすると、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 を参照する外部キーです

詳細が必要な場合はお気軽にお知らせください

4

4 に答える 4

0

そのクエリをa2と呼んでいるので、a2.column_nameのように呼び出します

于 2013-06-09T09:53:19.997 に答える
0

そうすることができるはずですが、それは正しいセグメントに配置した場合に限られます。また、FROM サブクエリでこれを行うと、パフォーマンスが大幅に低下する可能性があることに注意してください。

とにかく、あなたの問題は、参照uacta1ていて、それらが定義されていない場所にあるようです。これは構文違反です。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 は結合ごとに 3 行ではなく、合計で 3 行しか返さないことに注意してください。)

于 2013-06-09T14:46:12.637 に答える