1

別のテーブルの 2 つの列にあるユーザーの ID の出現回数とともに、ユーザーのプロファイル情報を返すクエリを作成しようとしています。以下に例を示します。

TableA
userID  userName
1       UserA
2       UserB

TableB
LinkID  leadID  followID
1       1       2
2       1       3
3       2       1

UserID 1 に対してクエリを実行すると、 UserA2 (leadID での 1 の発生)、および1 (followID での 1 の発生)を取得することが期待されます。これに関するヘルプは大歓迎です。事前に感謝します。

4

3 に答える 3

3

実際に参加する必要はありません。代わりに、3 つの個別の選択を行うことができます。

SELECT
(
    SELECT userName
    FROM TableA
    WHERE userID = 1
) AS userName,
(
    SELECT COUNT(*)
    FROM TableB
    WHERE leadID = 1
) AS count_leadID,
(
    SELECT COUNT(*)
    FROM TableB
    WHERE followID = 1
) AS count_followID

結果:

ユーザー名 count_leadID count_followID
ユーザーA 2 1             
于 2010-09-17T20:48:43.250 に答える
0
SELECT a.userName,
       b1.count(*) as leads,
       b2.count(*) as follows
FROM TableA a
INNER JOIN TableB b1 on a.userID = b1.leadID
INNER JOIN TableB b2 on a.userID = b2.followID
GROUP BY a.userName

mySQL の最適化方法によっては、leadID と followID にインデックスがある場合、特にすべてのユーザーを同時にクエリするのではなく、少数のユーザーのみをクエリする場合は、クエリが高速化される可能性があります。

于 2010-09-17T22:27:23.190 に答える
0
SELECT a.userName,
       SUM(IF(b.leadId = a.userId, 1, 0) as Leads,
       SUM(IF(b.followId = a.userId, 1, 0) as Follows
FROM TableA a
     TableB b
GROUP BY a.userName
于 2010-09-17T20:47:54.830 に答える