Sql 从主表返回记录,在明细表中有特定记录
我有以下两个病例表。tbl_emp是主表,例如:-Sql 从主表返回记录,在明细表中有特定记录,sql,oracle,join,multi-table,Sql,Oracle,Join,Multi Table,我有以下两个病例表。tbl_emp是主表,例如:- ---------------------------------------------------------- tbl_emp ---------------------------------------------------------- emp_id emp_name 1 Peter 2 Matt
----------------------------------------------------------
tbl_emp
----------------------------------------------------------
emp_id emp_name
1 Peter
2 Matt
3 Jacob
----------------------------------------------------------
详细信息表包含员工的家庭详细信息
-----------------------------------------------------------------
tbl_family
----------------------------------------------------------------
family_id emp_id relation name age
-----------------------------------------------------------------
1 1 WIFE Susan 32
2 1 SON Jack 3
3 2 DAUGHTER Hannah 4
4 2 WIFE Leah 29
5 1 WIFE Anna 38
6 3 MOTHER Loran 73
7 2 MOTHER Sofia 81
------------------------------------------------------------------
我想通过查询了解哪些员工在tbl_家族中有特定的“关系”条目,哪些员工没有。例如,我设法对有妻子进入的女雇员进行了以下查询
select * from tbl_emp, tbl_family where
tbl_emp.emp_id = tbl_family.emp_id and
tbl_family.relation = 'WIFE'
此查询正确返回Peter和Matt。但我需要询问三个问题。首先。给我tbl_家族中没有妻子的员工。i、 e输出应该是
---------------------------------------
emp_id emp_name
---------------------------------------
3 Jacob
---------------------------------------
其次,对于它将提供的数据集,记录有两个妻子条目(或任何其他关系)
-----------------------------------------
emp_id emp_name
-----------------------------------------
1 Peter
-----------------------------------------
最后,所有有妻子和母亲条目的员工。此查询将返回
-----------------------------------------
emp_id emp_name
-----------------------------------------
2 Matt
-----------------------------------------
我已经编辑了所有结果输出的问题。谢谢。你应该玩
tbl\u family.relation='妻子'
您可以使用例如(tbl_family.relation='fixer'或tbl_family.relation='MOTHER'或tbl_family.relation='children'
)
您还可以使用外部联接
查找没有家庭成员的人员第一点:
--wihout wife
select tbl_emp.*
from tbl_emp
left join tbl_family
on
tbl_emp.emp_id = tbl_family.emp_id and tbl_family.relation = 'WIFE'
where tbl_family.emp_id IS NULL;
第二点:
--having any relation at least twice
select tbl_emp.id, tbl_emp.name, tbl_family.relation
from tbl_emp
left join tbl_family
on
tbl_emp.emp_id = tbl_family.emp_id
group by tbl_emp.id, tbl_emp.name, tbl_family.relation
having count(tbl_family.emp_id) > 1;
第三点:
--having WIFE, SON AND DAUGHTER.
select tbl_emp.id, tbl_emp.name
from tbl_emp
left join tbl_family
on
tbl_emp.emp_id = tbl_family.emp_id and (
tbl_family.relation = 'WIFE' or
tbl_family.relation = 'SON' or
tbl_family.relation = 'DAUGHTER'
)
group by tbl_emp.id, tbl_emp.name
having count(distinct tbl_family.relation) >= 3;
SELECT tbl_emp.*
FROM tbl_emp
INNER JOIN tbl_family tf1
ON tbl_emp.emp_id = tf1.emp_id AND tf1.relation = 'WIFE'
INNER JOIN tbl_family tf2
ON tbl_emp.emp_id = tf2.emp_id AND tf2.relation = 'MOTHER';
第三点:
--having WIFE, SON AND DAUGHTER.
select tbl_emp.id, tbl_emp.name
from tbl_emp
left join tbl_family
on
tbl_emp.emp_id = tbl_family.emp_id and (
tbl_family.relation = 'WIFE' or
tbl_family.relation = 'SON' or
tbl_family.relation = 'DAUGHTER'
)
group by tbl_emp.id, tbl_emp.name
having count(distinct tbl_family.relation) >= 3;
SELECT tbl_emp.*
FROM tbl_emp
INNER JOIN tbl_family tf1
ON tbl_emp.emp_id = tf1.emp_id AND tf1.relation = 'WIFE'
INNER JOIN tbl_family tf2
ON tbl_emp.emp_id = tf2.emp_id AND tf2.relation = 'MOTHER';
你能提供一个样本输出吗?先生,样本输出已提供.Bro。谢谢你详尽的回答。我想问一个愚蠢的问题。就像你看到了问题,然后提出了正确的问题。如何获得这种水平的专业知识?这仅仅是由于彻底的研究或经验吗?因为我知道sql,但我不能做这样的查询。谢谢。不客气:)这些不是复杂的问题,但你问题的答案是:激情和经验。是的,首先是学习,然后是经验。一次又一次的学习和体验。Sql是一种简单的语言,但却是一种不同的范式(它是一种查询语言,而不是过程语言)。可能会有复杂的疑问。上帝保佑你。谢谢