Mysql MariaDB-如何使用IF/ELSE从另一个表中添加(连接)更多列

Mysql MariaDB-如何使用IF/ELSE从另一个表中添加(连接)更多列,mysql,sql,mariadb,Mysql,Sql,Mariadb,我有两个名为ARTICLE和SAVE的表 文章表包含完整的文章数据。而SAVE表与文章的email和seq之间有关系 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),保存表格将更改为 SA

我有两个名为
ARTICLE
SAVE
的表

文章
表包含完整的文章数据。而
SAVE
表与
文章的
email
seq
之间有关系

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
seq email    article_seq
3   ch@x.y   1
4   a@x.y    3
我想在文章调用
中再创建一列(选择
的结果)并保存
。我希望
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
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
当我以
fm@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
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

因此,我需要根据
ARTICLE
将这两个表连接起来,我可能需要
IF/ELSE
条件。如何执行此操作?

首先选择所有文章(由用户)并对文章序列id进行左连接。需要左连接来区分已保存(行存在)和未保存(行不存在)


由于两个表中都存在
电子邮件
,看起来您也有冗余。

您似乎希望
存在

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;

左连接
是表达这一点的自然方式:

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
/
电子邮件组合最多只能在
保存中出现一次

我用

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。

请显示您试图达到目标的查询。您能解释一下结果集背后的逻辑吗?我越仔细地查看您的预期输出和给定输入,其意义就越小:-SSince
ch@x.y
保存了
seq
为1的文章。(
保存表
)JOIN的结果为1,0,0(已保存)。自从<代码>fm@x.y
save
表中没有任何保存数据,结果是0,0,0(已保存),换句话说,不管您登录的是谁,因为您列出了所有文章,并且如果它们已保存,则标记为。我认为
如果(s.is\u saved为NULL,1,0)
部分应该更改。但是
保存
表没有
保存
列。我需要与当前用户的电子邮件进行比较。我该怎么做?我想我应该做‘if(子查询1,0中的seq)’。