SQL - 为条件加入选定的数据或表

时间:2016-09-03 08:33:54

标签: php mysql database join inner-join

我有用户和关系的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的回答

2 个答案:

答案 0 :(得分:1)

您可以将用户所在的用户合并到uidrelid

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