我是SQL的新手,但我正在尝试加入两个表。但是,它没有像我预期的那样工作。这是在Postgresql中。
以下是我要加入的表格。
SELECT * FROM houses;
id | name | address | picture
----+----------------+-------------+------------
1 | House 1 | 440 S 3rd W | long-link2.jpg
2 | House 2 | 538 S 5th E | long-link.jpg
SELECT house_id, trunc(avg(score), 1) FROM house_reviews GROUP BY house_id;
house_id | trunc
----------+-------
1 | 3.0
2 | 3.0
尝试1(正常)
SELECT * FROM houses
LEFT JOIN (SELECT house_id, trunc(avg(score), 1) FROM house_reviews GROUP BY house_id) AS r
ON houses.id = r.house_id;
尝试2(不起作用)
SELECT id, name, address FROM houses
LEFT JOIN (SELECT house_id, trunc(avg(score), 1) FROM house_reviews GROUP BY house_id) AS r
ON houses.id = r.house_id;
两者之间的唯一区别是我没有在尝试2中选择图片。但是尝试2似乎根本没有加入。而是显示
id | name | address
----+----------------+-------------
1 | Tuscany | 440 S 2nd W
2 | Mountain Lofts | 538 S 2nd W
意味着它无法加入,而只是显示房屋表。
我很困惑为什么第二个表中的连接失败,因为我只删除了一个任意列(图片)。
有没有办法可以将两张桌子连在一起,但也可以从“房屋”表中排除图片栏?
谢谢!
答案 0 :(得分:2)
您只看到来自houses
的数据,因为您已经选择了所有数据。试试这个:
SELECT
h.id, h.name, h.address,
r.avg_score
FROM houses h
LEFT JOIN (
SELECT house_id, trunc(avg(score), 1) avg_score
FROM house_reviews
GROUP BY house_id
) AS r
ON houses.id = r.house_id;