我的SQL查询有问题。
我需要获得用户列表。问题是我使用left join
。
这是我的查询
SELECT
u.*
FROM
users u LEFT JOIN game g on g.user_id = u.user_id
LEFT JOIN game_actions ga on ga.game_id = g.id
LEFT JOIN emails e on e.id = ga.email_id
WHERE
u.user_id = 0
AND u.is_contact_by_email = 1
AND email.type = 2
由于与其他表的连接,此查询多次返回同一用户 我希望此查询只返回每个用户一次。 我正在使用sql developer。
先谢谢了。
答案 0 :(得分:1)
鉴于您没有出于任何目的使用游戏,游戏活动或电子邮件(他们没有过滤用户,并且您没有使用这些表中的数据来丰富结果),因此无需加入这些几乎没有表格:
SELECT
u.*
FROM users u
WHERE u.user_id = 0
AND u.is_contact_by_email = 1
答案 1 :(得分:1)
您可以按user_id
对结果进行分组,并使用aggregate functions返回其他字段,以获取eaxmple -
SELECT u.user_id, GROUP_CONCAT(g.game_id) games FROM users u
LEFT JOIN game g
ON g.user_id = u.user_id
LEFT JOIN game_actions ga
ON ga.game_id = g.id
LEFT JOIN emails e
ON e.id = ga.email_id
WHERE
u.user_id = 0 AND u.is_contact_by_email = 1
GROUP BY
u.user_id
答案 2 :(得分:0)
尝试使用与您的查询不同的关键字
答案 3 :(得分:0)
我想每个用户还有更多游戏,动作和电子邮件。你怎么想象结果表看起来像?因为当您仅从用户表(SELECT u.*
)中进行选择时,加入其他表是没有意义的。如果您需要其他表,请使用GROUP BY (u.user_id)
按用户对行进行分组。