mariadb-如何使用if/else从另一个表中添加(连接)更多的列

of1yzvn4  于 2021-06-24  发布在  Mysql
关注(0)|答案(4)|浏览(398)

我有两张table叫 ARTICLE 以及 SAVE . ARTICLE 表包含整个项目数据。以及 SAVE 表之间有关系 email 以及 seqARTICLE .

ARTICLE
seq email    title content
1   fm@x.y   ya    hah
2   ch@x.y   ho    hihi
3   ch@x.y   yo    hoho

SAVE
seq email    article_seq
3   ch@x.y   1

所以,如果你用你的帐户保存第三篇文章( a@x.y ), SAVE 表将更改为。。。

SAVE
seq email    article_seq
3   ch@x.y   1
4   a@x.y    3

我想创造一个 SELECT )在文章调用中增加一列 is_saved . 我希望这个结果 SELECT :
当我以身份登录时 ch@x.y ```
RESULT
seq email title content is_saved
1 fm@x.y ya hah 1
2 ch@x.y ho hihi 0
3 ch@x.y yo hoho 0

当我以身份登录时 `fm@x.y` ```
RESULT
seq email    title content is_saved
1   fm@x.y   ya    hah     0
2   ch@x.y   ho    hihi    0
3   ch@x.y   yo    hoho    0

所以,我需要 JOIN 这两张表基于 ARTICLE 我可能需要 IF/ELSE 条件。我该怎么做?

7rtdyuoh

7rtdyuoh1#

我用…解决了这个问题。。。

SELECT *,
  (CASE WHEN EXISTS
    (SELECT 1
      FROM save s
        WHERE a.seq = s.article_seq AND s.email=?)
    THEN 1 ELSE 0 END)
  AS is_saved
FROM article a;
``` `?` 是登录用户电子邮件。如果您可能知道node.js或spring(服务器端)。你可以理解我的意思。你用 `?` 对于非特定参数。例如,您不知道当前哪个人将登录。此时,需要使用问号,以便正确的数据进入sql。
fiei3ece

fiei3ece2#

首先,选择所有项目(由用户),并对项目seq id进行左联接。需要左联接来区分已保存(行存在)和未保存(行不存在)。

SELECT
  *,
  IF(s.is_saved IS NULL, 1, 0) as 'is_saved'
FROM 'ARTICLE' a
LEFT JOIN 'SAVE' s
  ON a.seq = s.article_seq
WHERE a.email = :email

看起来你也有多余的人 email 存在于两个表中。

wztqucjr

wztqucjr3#

left join 是一种自然的表达方式:

select a.*,
       (s.seq is not null) as is_saved
from article a left join
     save s
     on a.seq = s.article_seq and
        a.email = s.email;

这假设 seq / email 组合最多只能出现一次 save .

nfs0ujit

nfs0ujit4#

你好像想要 EXISTS :

select *, (case when exists (select 1 from SAVE s where s.article_seq = a.seq)
                then 1 else 0
           end) as is_saved
from ARTICLE a;

相关问题