左作るすべてのsecord_tableにレコードが存在しない場合は、 `second_table.key!= 'value'`に参加する方法

最大ブロック:

そこ一対一の関係を持つ2つのテーブルがあり、それは第二の表は、最初よりも少ない行を持つことができるという法的です。

ここでは、挿入されたデータとSQLコードは次のとおりです。

create table data(
    data_id int primary key,
    name text
);

create table data_extra(
    extra_id int references data(data_id) primary key ,
    extra text
);

insert into data values (1, 'n1');
insert into data values (2, 'n2');
insert into data values (3, 'n3');

insert into data_extra values (1, 'e1');
insert into data_extra values (2, 'e2');


select * from data left join data_extra on data_id = extra_id;
--  data_id | name | extra_id | extra
-- ---------+------+----------+-------
--        1 | n1   |        1 | e1
--        2 | n2   |        2 | e2
--        3 | n3   |          |
-- (3 rows)

私はすべてのためのクエリを作成する必要がdata+のdata_extra!テーブル余分=「E1」ここに私の試みは、次のとおりです。

select * from data left join data_extra on data_id = extra_id
where extra != 'e1';
--  data_id | name | extra_id | extra
-- ---------+------+----------+-------
--        2 | n2   |        2 | e2
-- (1 row)

このクエリでの問題、それはdata_extraテーブルの関連行を持っていないdata.name =「N3」行を返さないこと。

どのように私は結果data.name = N2とdata.name = N3として取得するには、それを修正することができます。

GMB:

あなたは行うことができます:

select * 
from data d
left join data_extra de on d.data_id = de.extra_id 
where de.extra_id is null or de.extra <> 'e1'

試合と、この削除し行extraに等しい'e1'非一致する行を保持しながら、。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377566&siteId=1