Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用“where second_table.key!=”进行左连接值'`如果secord_表中根本没有记录_Sql_Postgresql_Join_Left Join - Fatal编程技术网

Sql 如何使用“where second_table.key!=”进行左连接值'`如果secord_表中根本没有记录

Sql 如何使用“where second_table.key!=”进行左连接值'`如果secord_表中根本没有记录,sql,postgresql,join,left-join,Sql,Postgresql,Join,Left Join,有两个表具有一对一的关系,第二个表的行数可以少于第一个表是合法的 以下是包含插入数据的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');

有两个表具有一对一的关系,第二个表的行数可以少于第一个表是合法的

以下是包含插入数据的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)


我需要查询所有数据+数据\u额外表格,其中额外!='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.name='n3'行,而data\u extra表中没有相关行

如何修复它,以获取结果数据。name=n2和data.name=n3。

您可以执行以下操作:

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'

这将删除匹配且额外值等于“e1”的行,同时保留不匹配的行。

所有数据+数据\u额外表,其中额外值!='e1’不清楚。A包括预期和实际输出以及明确的规格和说明。您的说明不清楚&您的示例没有涉及很多可供猜测的案例。PS您似乎想在data\u id=extra\u id&data.name='n3'上左连接。