MySQL连接同一表中的多个列
我试图编写一个查询,返回一个用户配置文件信息,以及另一个表中2列中用户ID的出现次数。下面是一个例子: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)。在此方面的任何
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)。在此方面的任何帮助都将不胜感激,并提前表示感谢。您实际上不需要为此加入,您可以选择三个单独的选项
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