MySQL连接同一表中的多个列

MySQL连接同一表中的多个列,mysql,join,multiple-columns,Mysql,Join,Multiple Columns,我试图编写一个查询,返回一个用户配置文件信息,以及另一个表中2列中用户ID的出现次数。下面是一个例子: TableA userID userName 1 UserA 2 UserB TableB LinkID leadID followID 1 1 2 2 1 3 3 2 1 查询用户ID 1时,我希望检索UserA、2(leadID中出现1)和1(followID中出现1)。在此方面的任何

我试图编写一个查询,返回一个用户配置文件信息,以及另一个表中2列中用户ID的出现次数。下面是一个例子:

TableA
userID  userName
1       UserA
2       UserB

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

查询用户ID 1时,我希望检索UserA2(leadID中出现1)和1(followID中出现1)。在此方面的任何帮助都将不胜感激,并提前表示感谢。

您实际上不需要为此加入,您可以选择三个单独的选项

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
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
结果:

userName count_leadID count_followID UserA 2 1 用户名计数\u leadID计数\u followID 用户A 2 1
根据mySQL的优化方式,如果您在leadID和followID上有索引,则这可能会加快查询速度,特别是如果您只查询几个用户,而不是同时查询所有用户。

Jeff,我发现此查询存在语法错误。我相信我之前做过类似的事情,它返回的线索和跟踪值都是相同的——这是不正确的。是的,你会的,这是一个愚蠢的错误。但是,用Mike上面使用的相同的总数,而不是像我愚蠢地使用计数,应该是可行的。
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