SQL如何从这两个表创建内部联接

时间:2017-03-07 21:15:05

标签: sql

我正在学习SQL,我正在创建一个社交网络作为学习体验。我有两个名为 Streams 投票的表格,Streams提取用户创建的内容,而Votes存储人们喜欢的内容。我想弄清楚的是我如何从两个表中返回数据以检查用户是否喜欢显示的特定帖子。例如,这就是我的表格的外观。如果您看到它们都有一个共同的字段 stream_id ,并且它们都有数字278.如何进行内部联接以检查两个表中是否有任何公共stream_ID?这是我使用的sql代码,它为我提供了Stream数据

查询1

select post,profile_id,
votes,id as stream_id FROM streams WHERE latitudes>=28.1036 AND
            28.9732>=latitudes AND longitudes>=-81.8696 AND -80.8798>=longitudes 
            order by id desc limit 10

用户ID为11,Streams.profile_id和Votes.my_id都是相同的字段。我已经尝试过这个SQL查询,但这只返回1个结果。我想再次返回我在查询1中执行的Streams表中的所有结果,并在Votes表中添加另一列Votes.stream_id = Streams.ID的结果,因为它将显示特定用户喜欢的帖子。任何大麻都会很棒

查询2

select s.post,s.profile_id,
s.votes,s.id as stream_id, v.my_id as ID  FROM streams s inner join Votes v on (s.id = v.stream_id) WHERE latitudes>=28.1036 AND
            28.9732>=latitudes AND longitudes>=-81.8696 AND -80.8798>=longitudes 
            order by id desc limit 10

Streams Table

投票 Votes Table

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找LEFT JOIN

 select s.post,s.profile_id,
     s.votes,s.id as stream_id, v.my_id as ID  FROM streams s LEFT JOIN Votes v on (s.id = v.stream_id) WHERE latitudes>=28.1036 AND
                 28.9732>=latitudes AND longitudes>=-81.8696 AND -80.8798>=longitudes 
                 order by id desc limit 10

答案 1 :(得分:1)

您需要使用LEFT OUTER JOIN代替INNER JOIN

SELECT s.post, s.profile_id, s.votes, s.id as stream_id, v.my_id as ID  
FROM streams s 
LEFT OUTER JOIN Votes v on (s.id = v.stream_id) WHERE latitudes>=28.1036 AND
        28.9732>=latitudes AND longitudes>=-81.8696 AND -80.8798>=longitudes 
        order by id desc limit 10

有关联接的详细信息,请查看here