我无法理解此查询的错误或如何将其正确连接在一起。
我知道我错过了其他查询的结果,这些查询分别使用同一个表的两个别名来显示连接的两侧。
友谊中有两个“id”(源和目标),它们都映射到users表中的同一列。
我认为是导致无效加入的OR语句,如果是,那么加入假设是如何完成的。如果不是什么问题?
{{1}}
是否使用“DISTINCT?”这个词
我很感激帮助,我尝试过INNER和LEFT JOINS,但是我的想法只是在这上面消息,我无法弄清楚如何让它工作。
这是IS WORKING的查询,并向我显示比上述查询更多的用户:
{{1}}
友情表定义:
用户表定义:
答案 0 :(得分:1)
你必须要么
1. UNION(不同)您对源和目标的第二个查询的预测或
2.选择他们作为来源或目标的不同用户
SELECT DISTINCT u.id, u.first_name, u.last_name
FROM friendships AS f, users AS u
WHERE f.mutual = 'true' -- both are friends
AND (u.id = f.source_id OR u.id = f.target_id)
AND f.created_at BETWEEN '2016-01-20' AND '2016-01-27'
ORDER BY u.first_name;
答案 1 :(得分:0)
这将避免u1 * u2之间的任何“重复”。存在一个(或更多)友谊记录(在给定时间段内)或不存在。
SELECT u1.first_name AS s_firstname, u1.last_name AS s_lastname
, u2.first_name AS t_firstname, u2.last_name AS t_lastname
FROM users AS u1
JOIN users AS u2
ON EXISTS (
SELECT 13 FROM friendships f
WHERE u1.id = f.source_id AND u2.id = f.target_id
AND f.mutual = 'true'
AND f.created_at BETWEEN '2016-01-20' AND '2016-01-27';
);