即使不使用 ON 不满足子条件,仍然获取父记录

Fetch Parent Record anyway even if child condition doesn't meet without using ON

我有两个表 Employee 和 Address。 一个员工可以有多个地址。 在这里,我想获取特定 emp_id 的 'active employee details' 和 'active address details'。我可以通过以下查询实现此目的:

Table Structure:
Employee(emp_id,name,is_active)
Address(add_id,emp_id,address,is_active)

查询:

SELECT * FROM EMPLOYEE e
LEFT OUTER JOIN ADDRESS a
ON e.emp_id=a.emp_id 
WHERE e.is_active='A'
AND a.is_active='A';

使用上面的查询,如果没有有效地址,它不会 return 任何员工详细信息。我想 return 活跃员工的详细信息,即使它没有任何活跃地址。

注意:因为我正在使用 Hibernate 查找不使用 ON 的查询。这里只能使用Where子句。

请多多指教。

您需要将 a.is_active='A' 放在 ON 子句中而不是 WHERE 子句中

SELECT * FROM EMPLOYEE e
LEFT OUTER JOIN ADDRESS a
ON e.emp_id=a.emp_id AND a.is_active='A'
WHERE e.is_active='A';

由于您在 on 子句中使用条件有限制,您可以尝试以下方法。它将 return 地址处于活动状态或地址不可用的行(假设地址 table 中的 is_active 列永远不会为空)。

Schema and insert statements:

 create table EMPLOYEES(emp_id int, name varchar(20), is_active varchar(10));
 create table Address(add_id int ,emp_id int ,address varchar(50),is_active varchar(10));

 insert into EMPLOYEES values (1,'NAME1','A');
 insert into Address values(1,1,'addr1','N');
 insert into Address values(2,1,'addr1','N');

查询:

 SELECT * FROM EMPLOYEES e
 LEFT OUTER JOIN (select * from Address where is_active='A') a
 ON e.emp_id=a.emp_id 
 WHERE e.is_active='A'
 AND (a.is_active='A' or a.is_active is null);

输出:

EMP_ID NAME IS_ACTIVE ADD_ID EMP_ID ADDRESS IS_ACTIVE
1 NAME1 A null null null null

db<>fiddle here