SQL从两个表中选择以在SELECT语句中设置变量
我有两张桌子:SQL从两个表中选择以在SELECT语句中设置变量,sql,sqlite,Sql,Sqlite,我有两张桌子: 警报{id,title,description} 读取警报{alert\u id} 我想执行一个返回以下内容的sql: 警报{id,title,description,is_read} 已读需要为1或0。1如果在读取警报中设置了id,则0否则 在一个sql查询中实现这一点的最佳方法是什么 我正在使用Sqlite我将使用select子句中的子查询来处理此问题: select a.* (case when exists (select 1 from read_alert
警报{id,title,description}
读取警报{alert\u id}
我想执行一个返回以下内容的sql:
警报{id,title,description,is_read}
已读
需要为1
或0
。1如果在读取警报中设置了id,则0否则
在一个sql查询中实现这一点的最佳方法是什么
我正在使用Sqlite我将使用select
子句中的子查询来处理此问题:
select a.*
(case when exists (select 1 from read_alerts ra where ra.alert_id = a.id)
then 1 else 0
end) as is_read
from alerts a;
在select
子句中使用子查询的关键原因是,您没有指定read\u alerts
是否可以有多行。此版本的查询保证每个警报一行,无论read\u alerts
的内容如何,我将使用select
子句中的子查询来处理此问题:
select a.*
(case when exists (select 1 from read_alerts ra where ra.alert_id = a.id)
then 1 else 0
end) as is_read
from alerts a;
在select
子句中使用子查询的关键原因是,您没有指定read\u alerts
是否可以有多行。此版本的查询保证每个警报一行,而不管read\u alerts
的内容如何,这可以通过外部联接完成:
SELECT a.id,
a.title,
a.description,
ra.id IS NOT NULL AS is_read
FROM alerts AS a
LEFT JOIN read_alerts AS ra on a.id = ra.alert_id;
或使用相关子查询:
SELECT id,
title,
description,
EXISTS (SELECT 1
FROM read_alerts
WHERE alert_id = alerts.id
) AS is_read
FROM alerts;
这可以通过外部联接完成:
SELECT a.id,
a.title,
a.description,
ra.id IS NOT NULL AS is_read
FROM alerts AS a
LEFT JOIN read_alerts AS ra on a.id = ra.alert_id;
或使用相关子查询:
SELECT id,
title,
description,
EXISTS (SELECT 1
FROM read_alerts
WHERE alert_id = alerts.id
) AS is_read
FROM alerts;
您所说的“最佳”是什么意思?这是一种只需使用一个查询即可实现的解决方案。我不需要考虑执行时间或类似的事情,你所说的“最佳”是什么意思?一个只有一个查询就能实现的解决方案。我不需要考虑执行时间或类似的事情。