我有以下数据库:
来自Contacts表的user_id和contact_id是PK和FK到Users表中的user_id字段。如何选择特定用户的所有联系人(或朋友),包括该用户的所有联系人的联系人数量。我尝试了不同的SELECT查询但是联系人数量不正确或者contact_status打印错误。我使用COUNT()作为函数来打印联系人的数量。我使用此查询但是contact_status打印错误:
SELECT COUNT(Contacts.contact_id), Users.user_id, Users.user_name, Users.name, Users.user_picture, Users.mood_message, Users.phone_number, Users.email, Users.country, Users.city, Users.website, Users.birth_date, Users.gender, Users.language, Users.about_me, Users.online_status, Users.privacy, Contacts.contact_status
FROM Contacts JOIN Users ON Contacts.contact_id = Users.user_id
WHERE Users.user_name IN (
SELECT Users.user_name
FROM Users
WHERE Users.user_id IN (
SELECT Contacts.contact_id
FROM Contacts
WHERE Contacts.user_id = 12
)
)
GROUP BY Users.user_name;
用户表:
user_id,user_name,...
12约翰......
13马特...
14杰克......
联系人表:
user_id,contact_status,contact_id
12 1 13
13 1 12
12 2 14
如果我想要打印John的所有联系人,结果应该包括:
COUNT(Contacts.contacts_id),Users.user_name,Users。 ...,Contacts.contact_status
1马特... 1
0杰克...... 2
以上查询将1,1打印为contact_status而不是1,2。
你可以帮我解决这个问题吗?提前谢谢。
答案 0 :(得分:0)
如果我理解你的目标是什么,这应该有效:
SELECT c.contact_status, cc.contactCount, u.*
FROM Contacts c JOIN Users u ON (c.contact_id = u.user_id)
JOIN (
SELECT user_id, COUNT(1) contactCount FROM Contacts
GROUP BY user_id
) cc ON (c.user_id = cc.user_id)
WHERE c.user_id = 12
答案 1 :(得分:0)
我希望我理解你的要求,但使用子查询要简单得多,如下:
SELECT
u.* -- Whatever fields you need
,(
select count(*) from Contacts c
where c.contactid = co.userid -- refers to outer record
) as contact_count
FROM
Users u Inner Join Contacts co
on co.UserId = u.UserId
WHERE
U.UserId = 12