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。请显示您试图达到目标的查询。您能解释一下结果集背后的逻辑吗?我越仔细地查看您的预期输出和给定输入,其意义就越小:-SSincech@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)’。