我有用户和关系的SQL表,比如 用户{ID,姓名,电子邮件} 关系{ID,uid,relid,type}
我希望得到所有朋友" SQL,使用JOIN或其他任何内容的ID,名称和电子邮件(按当前用户ID)。
如果使用join,最好是加入用户表并选择关系或选择关系并加入用户?
像这样的东西(我现在发明了,我使用了一些不同的表和代码,对不起错误)1:
SELECT DISTINCT u.ID, u.name, u.email FROM users u JOIN relationships r ON (r.uid = 1 OR r.relid = 1) AND r.type = 1 WHERE u.ID = r.uid OR u.ID = r.relid
2:
SELECT DISTINCT u.ID, u.name, u.email FROM relationships r JOIN users u ON r.uid = u.ID OR r.relid = u.ID = 1 WHERE r.uid = u.ID OR r.related = u.ID
编辑: 当我选择ID等于r.uid或r.related的用户时,我使用DISTINCT,我也得到每个关系的当前用户(uid +相关)。 DISTINCT应该是唯一的用户?我是初学者,在stackoverflow上发现了这个。
那么,从用户中选择并加入关系或选择关系并加入用户是否更好?
BTW:我非常喜欢UNION的回答
答案 0 :(得分:1)
您可以将用户所在的用户合并到uid
和relid
。
SELECT users.*
FROM users
INNER JOIN relationships AS rel
ON users.ID = rel.uid
WHERE users.ID = 500
UNION
SELECT users.*
FROM users
INNER JOIN relationships AS rel
ON users.ID = rel.relid
WHERE users.ID = 500
答案 1 :(得分:0)
不确定您使用DISTINCT
的原因,但看起来您只想从关系表(朋友)中选择所有行,然后从users表中加入他们的详细信息。
SELECT u.id, u.name, u.email
FROM relationships r
LEFT JOIN users u ON u.id = r.uid
WHERE r.uid = 12345