我有一张包含所有帖子的表格。我还有一个表,当用户喜欢带有外键user_id和post_id的帖子时,会添加一行。
我想检索帖子的所有列表,以及特定用户是否喜欢该帖子。使用外部联接我最终得到一些帖子两次。一次为用户1,一次为用户2.如果我使用WHERE过滤likes.user_id = 1 AND likes.user_id为NULL我没有得到只有其他用户喜欢的帖子。
理想情况下,我会使用单个查询执行此操作。 SQL不是我的优势,所以我甚至不确定是否需要子查询或者连接是否足够。
对于这种含糊不清的道歉,但我认为这是一个很常见的问题,它应该是有道理的。
编辑:我用我提到的两个查询创建了一个DB Fiddle。 https://www.db-fiddle.com/f/oFM2zWsR9WFKTPJA16U1Tz/4更新:昨晚搞清楚了。这就是我最终的结果:
library(dplyr)
library(shiny)
library(lubridate)
df = data.frame(location, date = as_datetime(date),latitude,longitude,pm25,pm10,no2)
ui = fluidPage(
dateInput('date',
label = 'First Available Date',
value = min(df$date)
) ,
dateInput('date2',
label = 'Last available Date',
value = max(df$date)
),
submitButton(text = "Submit", icon = NULL, width = NULL),
shiny::dataTableOutput("merged")
)
server = function(input, output, session) {
output$merged <- shiny::renderDataTable({
df %>%
filter(as_date(date) >= input$date, as_date(date) <= input$date2)
})
}
shinyApp(ui = ui, server = server)
虽然我能够解决它,但感谢@wildplasser的回答。
答案 0 :(得分:2)
数据(我需要稍微更改一下,因为不应该分配给连续出版物):
CREATE TABLE posts (
id serial,
title varchar
);
CREATE TABLE users (
id serial,
name varchar
);
CREATE TABLE likes (
id serial,
user_id int,
post_id int
);
INSERT INTO posts (title) VALUES ('First Post');
INSERT INTO posts (title) VALUES ('Second Post');
INSERT INTO posts (title) VALUES ('Third Post');
INSERT INTO users (name) VALUES ('Obama');
INSERT INTO users (name) VALUES ('Trump');
INSERT INTO likes (user_id, post_id) VALUES (1, 1);
INSERT INTO likes (user_id, post_id) VALUES (2, 1);
INSERT INTO likes (user_id, post_id) VALUES (2, 2);
-- I want to retrieve a list of ALL of the posts and whether or not a specific user has liked that post
SELECT id, title
, EXISTS(
--EXISTS() yields a boolean value
SELECT *
FROM likes lk
JOIN users u ON u.id = lk.user_id AND lk.post_id=p.id
WHERE u.name ='Obama'
) AS liked_by_Obama
FROM posts p
;
结果:
id | title | liked_by_obama
----+-------------+----------------
1 | First Post | t
2 | Second Post | f
3 | Third Post | f
(3 rows)
答案 1 :(得分:0)
据我了解,您有两个表,例如帖子表,其中包含来自不同用户的所有帖子以及包含user.id
和post id
的相似表格。如果你想只翻阅帖子那么
select * from posts
如果您还需要用户信息,这可以在user
表中找到,那么您可以在下面进行操作。
select user.user_name, post.postdata from user,post where post.userid=user.userid
在上面的查询中,user_name
是user
表中的列名,postdata
是post
表中的列。