无论如何,即使子条件不满足而不使用 ON 也获取父记录



我有两个表Employee和Address。一个员工可以有多个地址。在这里,我想获取特定emp_id的"活动员工详细信息"one_answers"活动地址详细信息"。我可以通过以下查询实现这一点:

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';

使用上面的查询,如果没有活动地址,它不会返回任何员工详细信息。我想以任何方式返回活动员工的详细信息,即使它没有任何活动地址。

注意:当我使用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子句中使用条件有限制,所以可以尝试以下方法。它将返回地址为活动或地址不可用的行(假设地址表中的is_active列从不为null(。

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);

输出:

>ADD_IDMP_ID">IS_ACTIVE
EMP_IDNAMEIS_ACTIVE
1NAME1

最新更新