Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何合并两个不同的查询_Postgresql - Fatal编程技术网

Postgresql 如何合并两个不同的查询

Postgresql 如何合并两个不同的查询,postgresql,Postgresql,假设我在PostgreSQL中有这两个表 TABLE "Likes" ( id, post-id (foreign key pointing to "Post" table) ) TABLE "Post" ( id, body, date ) 我想做的是获取所有帖子和每个帖子的喜欢次数 我写了这个查询: SELECT "post-id", COUNT(*) AS "likes" FROM "Likes" GROUP BY "post-id"; 它将返

假设我在PostgreSQL中有这两个表

TABLE "Likes" (
    id,
    post-id (foreign key pointing to "Post" table)
)

TABLE "Post" (
    id,
    body,
    date
)
我想做的是获取所有帖子和每个帖子的喜欢次数

我写了这个查询:

SELECT "post-id", COUNT(*) AS "likes" FROM "Likes"
GROUP BY "post-id";
它将返回如下内容:

-------------------
| post-id | likes |
-------------------
| 1       | 9     |
-------------------
| 4       | 2     |
-------------------
---------------------------------------------------
| id | likes | body                  | date       |
---------------------------------------------------
| 1  | 9     | This is a post!       | 2017-05-03 |
---------------------------------------------------
| 2  |       | Tasdasdas!            | 2017-05-03 |
---------------------------------------------------
| 4  | 2     | This is another post! | 2017-05-04 |
---------------------------------------------------
| 5  |       | ssdasdasdadadass      | 2017-05-04 |
---------------------------------------------------
但我仍然需要将此查询与获取有关帖子的所有信息的查询合并。。。所以最后,我想要这样的东西:

-------------------
| post-id | likes |
-------------------
| 1       | 9     |
-------------------
| 4       | 2     |
-------------------
---------------------------------------------------
| id | likes | body                  | date       |
---------------------------------------------------
| 1  | 9     | This is a post!       | 2017-05-03 |
---------------------------------------------------
| 2  |       | Tasdasdas!            | 2017-05-03 |
---------------------------------------------------
| 4  | 2     | This is another post! | 2017-05-04 |
---------------------------------------------------
| 5  |       | ssdasdasdadadass      | 2017-05-04 |
---------------------------------------------------
我的问题是,我不知道如何将“likes”列添加到获取所有帖子的查询中,因为只有一些帖子有likes


提前谢谢^_^

您想要的是
左连接的典型情况:

SELECT    post.*, COUNT(likes.id) likes
FROM      post
LEFT JOIN likes ON post.id = likes.post_id
GROUP BY  post.id
这样,您就可以
选择post.*
,因为
groupbypost.id
意味着


旁注:您的标识符的命名非常奇怪。您应该尽量避免引用标识符,这只会使您的查询更难阅读。

您想要的是
左连接的典型情况:

SELECT    post.*, COUNT(likes.id) likes
FROM      post
LEFT JOIN likes ON post.id = likes.post_id
GROUP BY  post.id
Select p.id, c."likes", p.body, p.date
from Posts p
left join
(
SELECT "post-id", COUNT(*) AS "likes" FROM "Likes"
GROUP BY "post-id"
) c on p.id = c."post-id";
这样,您就可以
选择post.*
,因为
groupbypost.id
意味着


旁注:您的标识符的命名非常奇怪。您应该尽量避免引用标识符,这只会使您的查询更难阅读。

谢谢,它奏效了!:另外,我通常不使用引号,但出于某种原因,我不得不使用引号,否则它将不起作用。我使用phpPgAdmin来管理数据库和测试查询,如果标识符不都在引号内,它会给出错误。@Tirafesi我不是说你不需要引号。当你有这样的标识符时,你真的需要它。我是说,你不应该在一开始就使用这样的标识符。或者,至少,没有它们,你的工作会更简单。但如果你能忍受,就用它们。我不明白你的意思。。。你能给我举个正确标识符的例子吗?@Tirafesi喜欢答案中的那些。即所有小写字母,以字母(而不是数字)开头&使用下划线分隔单词(如果您需要分隔符)。——大写字母和
-
使您使用quote.Aah。那么实际的表名是怎么回事?与其创建名为Post的表,不如将其命名为Post?谢谢,它成功了!:另外,我通常不使用引号,但出于某种原因,我不得不使用引号,否则它将不起作用。我使用phpPgAdmin来管理数据库和测试查询,如果标识符不都在引号内,它会给出错误。@Tirafesi我不是说你不需要引号。当你有这样的标识符时,你真的需要它。我是说,你不应该在一开始就使用这样的标识符。或者,至少,没有它们,你的工作会更简单。但如果你能忍受,就用它们。我不明白你的意思。。。你能给我举个正确标识符的例子吗?@Tirafesi喜欢答案中的那些。即所有小写字母,以字母(而不是数字)开头&使用下划线分隔单词(如果您需要分隔符)。——大写字母和
-
使您使用quote.Aah。那么实际的表名是怎么回事?不是创建名为Post的表,而是应该将其命名为Post?
Select p.id, c."likes", p.body, p.date
from Posts p
left join
(
SELECT "post-id", COUNT(*) AS "likes" FROM "Likes"
GROUP BY "post-id"
) c on p.id = c."post-id";