我有两个表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);
输出:
EMP_ID | NAME | IS_ACTIVE | >ADD_IDMP_ID">IS_ACTIVE
---|---|---|
1 | NAME1 | 空 |