2017-04-14 56 views
0

我有这个查询,它给出了一个错误,即未知的U.UserID列在where子句中,但我看不到任何错误,因为我的Users表实例是U如何在子联合查询中传递父字段

SELECT GROUP_CONCAT(U.UserID), 
     (
      SELECT COUNT(DISTINCT(UserID)) 
      FROM (
         SELECT FriendID as UserID 
         FROM Friends 
         WHERE UserID=U.UserID AND Status=1 
         UNION All 
         SELECT UserID 
         FROM Follow 
         WHERE Type='user' AND TypeEntityID=U.UserID 
        ) tbl 
     ) as NoOfFriendsFollow 
FROM `Users` `U` 
WHERE `U`.`UserID` IN('1') 
LIMIT 10 

此查询任何解决方案或让我知道我错了

+0

感谢@Stefano为编辑:) –

回答

0
SELECT GROUP_CONCAT(UserID), 
(
    SELECT COUNT(DISTINCT(UserID)) FROM 
    (
     SELECT FriendID as UserID FROM Friends F 
     INNER JOIN Users U ON U.UserID=F.FriendID 
     WHERE F.Status=1 
     UNION All 
     SELECT FF.UserID FROM Follow FF 
     INNER JOIN Users U ON U.UserID=FF.UserID 
     WHERE Type='user' AND TypeEntityID=U.UserID 
    ) tbl 
) as NoOfFriendsFollow 
FROM Users WHERE UserID IN('1') LIMIT 10; 

试试看上面的代码。 希望这会有所帮助。

+0

返回追随者同样没有进行任何输入 –

0

不幸的是,MySSQL不允许你使用外部表引用“两个级别关闭”。所以,你可以这样做:

SELECT U.UserID, 
     (SELECT COUNT(DISTINCT UserID) 
     FROM (SELECT fr.FriendID as UserID, fr.FriendId as compareId 
       FROM Friends fr 
       WHERE fr.Status = 1 
       UNION All 
       SELECT f.UserID, f.TypeEntityID as compareId 
       FROM Follow f 
       WHERE f.Type = 'user' 
      ) tbl 
     WHERE tbl.UserID = compareId 
     ) as NoOfFriendsFollow 
FROM Users U 
WHERE U.UserID IN (1) 
LIMIT 10; 

注:

  • 这将移动到比较中间的子查询,所以查询解析。
  • 推测UserId是一个整数。只对字符串和日期常量使用单引号。
  • GROUP_CONCAT()没有意义。它将查询转换为仅返回一行的聚合查询。
  • 我需要加倍LIMIT。每UserId应该有一行。
  • 当查询中有多个表时,始终使用限定列名称。
+0

[面对同样的问题(https://i.stack.imgur.com/4h8qJ.png) –

+0

@SagarGangwal。 。 。这应该只是'compareId',而不是'compareId.UserId'。 –