Sql 从主表返回记录,在明细表中有特定记录

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是主表,例如:-

 ----------------------------------------------------------
   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是一种简单的语言,但却是一种不同的范式(它是一种查询语言,而不是过程语言)。可能会有复杂的疑问。上帝保佑你。谢谢