2016-03-23 10 views
1

私は2つのテーブルがあります。SQL SELECT

alerts {id, title, description}

read_alerts {alert_id}

私は次のことを返すSQLを実行したい:

alerts {id, title, description, is_read}

is_readはである必要があります10または0。 idがread_alertsに設定されている場合は1、それ以外の場合は0です。

これを1つのSQLクエリで実現するにはどうすればよいでしょうか?私が使用しています

Sqliteを

これは select句でサブクエリを使用しています
+0

あなたが "最高" とはどういう意味ですか? –

+0

これは、1つのクエリのみを使用して達成することができます。私は実行時間やこのようなものを検討する必要はありません – sn0ep

答えて

0
私が近づいてしまう

:あなたがするかどうかを指定していないので、

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_alertsは複数の行を持つことができます。このバージョンのクエリは、read_alertsの内容にかかわらず、アラートごとに1行を保証します。

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; 

または相関サブクエリを持つ:

0

これは、いずれかの外部結合で行うことができます

SELECT id, 
     title, 
     description, 
     EXISTS (SELECT 1 
       FROM read_alerts 
       WHERE alert_id = alerts.id 
      ) AS is_read 
FROM alerts; 
0
SELECT id, title, description, (CASE WHEN read_alert is not null THEN 1 else 0) as is_read 
FROM alerts, read_alerts;