SQL查询不完整的结果

时间:2016-01-26 08:20:25

标签: sql postgresql join

我无法理解此查询的错误或如何将其正确连接在一起。

我知道我错过了其他查询的结果,这些查询分别使用同一个表的两个别名来显示连接的两侧。

友谊中有两个“id”(源和目标),它们都映射到users表中的同一列。

我认为是导致无效加入的OR语句,如果是,那么加入假设是如何完成的。如果不是什么问题?

{{1}}

是否使用“DISTINCT?”这个词

我很感激帮助,我尝试过INNER和LEFT JOINS,但是我的想法只是在这上面消息,我无法弄清楚如何让它工作。

这是IS WORKING的查询,并向我显示比上述查询更多的用户:

{{1}}

友情表定义:

Euler's Number

用户表定义:

enter image description here

2 个答案:

答案 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';
        );