我遇到如下情况:
帖子和类似的表分别是:
----------------- --------------------------
| post_id | text | | post_id | like | person|
------------------- ---------------------------
| 1 | hello | | 1 | yes | Jhon |
| 2 | Haii | | 1 | yes | Sham |
| 3 | I am..| | 1 | yes | Ram |
-------------------- | 2 | yes | Mahe |
----------------------------
现在我想收到所有帖子,我想知道Sham是否喜欢每个帖子。
结果将是:
-----------------------------------
| post_id | text | liked_by_Sham |
-----------------------------------
| 1 | hello | yes |
| 2 | Haii | no |
| 3 | I am | no |
------------------------------------
由于我是SQL新手,任何人都可以解释如何做到这一点。我尝试使用内连接,但它不起作用。
我尝试使用以下查询:
select posts.*,liketb.like
from posts
inner join liketb
on posts.post_id = liketb.post_id
where liketb.person = 'Sham';
此查询仅提供sham喜欢的帖子。
答案 0 :(得分:1)
使用left join
和case
。 like
是关键字。确保它已正确转义。
select p.post_id, p.text,
case when l.like = 'yes' then l.like else 'no' end as liked_by_sham
from posts p
left join liketb l on p.post_id = l.post_id and l.person = 'Sham';
答案 1 :(得分:0)
<强> Sql Fiddle Demo 强>
您需要将过滤器clausule置于ON
部分,以便在不匹配时使用yes, no
或null
发布所有帖子。并使用 nvl 将所有NULL
转换为'no'
SELECT p."post_id", p."text", nvl(l."like", 'no') as liked_by_sham
FROM posts p
LEFT JOIN liketb l
ON p."post_id" = l."post_id"
AND l."person" = 'Sham'
<强>输出强>
| post_id | text | LIKED_BY_SHAM |
|---------|--------|---------------|
| 1 | hello | yes |
| 3 | I am.. | no |
| 2 | Haii | no |