【问题标题】:How to delete non duplicate rows in mysql?如何删除mysql中不重复的行?
【发布时间】:2014-02-25 10:10:37
【问题描述】:

我正在尝试显示拥有多个受抚养人的所有员工的 ssn、名字 (fname)、姓氏 (lname)、受抚养人姓名、受抚养人性别和受抚养人关系。 我能够获得所有家属的列表。显示具有多个家属的条目的查询是什么?

显示创建表员工

Employee | CREATE TABLE `employee` (
`fname` varchar(15) NOT NULL,
`minit` varchar(1) DEFAULT NULL,
`lname` varchar(15) NOT NULL,
`ssn` char(9) NOT NULL DEFAULT '',
`bdate` date DEFAULT NULL,
`address` varchar(50) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`salary` decimal(10,2) DEFAULT NULL,
`superssn` char(9) DEFAULT NULL,
`dno` int(11) DEFAULT NULL,
PRIMARY KEY (`ssn`),
KEY `fk_employee_department` (`dno`),
KEY `fk_employee_employee` (`superssn`),
CONSTRAINT `fk_employee_department` 
           FOREIGN KEY (`dno`) REFERENCES `department` (`dnumber`),
CONSTRAINT `fk_employee_employee` 
           FOREIGN KEY (`superssn`) REFERENCES `employee` (`ssn`)
ENGINE=InnoDB DEFAULT CHARSET=latin1 |

显示创建表相关

    DEPENDENT | CREATE TABLE `dependent` (
 `essn` char(9) NOT NULL DEFAULT '',
 `dependent_name` varchar(15) NOT NULL DEFAULT '',
 `sex` char(1) DEFAULT NULL,
 `bdate` date DEFAULT NULL,
 `relationship` varchar(8) DEFAULT NULL,
 PRIMARY KEY (`essn`,`dependent_name`),
 CONSTRAINT `fk_dependent_employee` 
             FOREIGN KEY (`essn`) REFERENCES `employee` (`ssn`)
 ENGINE=InnoDB DEFAULT CHARSET=latin1 |

当前使用查询:

select e. ssn,e.fname,e.lname,d.dependent_name,d.sex,d.relationship 
from dependent AS d ,Employee as e
WHERE e.ssn=d.essn

【问题讨论】:

  • 如果不了解您的表结构,我们将无法提供非常有效的帮助。我假设这里至少涉及两个表,或者一个表中的父子关系。请发布有关您的桌子的更多信息。
  • @MichaelBerkowski:我正在使用两个表(Employee 和 Dependent)。我正在尝试使用 ssn 让员工的受抚养人超过受抚养人......但是我让所有员工都有受抚养人。
  • 您的标题是“删除...”似乎与您的问题内容不匹配..抱歉,如果我误解了..
  • 还需要更多信息来了解 Employee 和 Dependent 表之间的关系。请张贴SHOW CREATE TABLE Employee; SHOW CREATE TABLE Dependent;的结果
  • 这是我正在使用的查询::: select e。 ssn,e.fname,e.lname,d.dependent_name,d.sex,d.relationship fromdependent AS d ,Employee as e WHERE e.ssn=d.essn;

标签: mysql


【解决方案1】:

使用子查询计算每个子查询的依赖数量并将其加入。这将获得您想要的过滤器:

select e.ssn, e.fname, e.lname, d.dependent_name, d.sex, d.relationship 
from Employee e join
     dependent d 
     on e.ssn = d.essn join
     (select d.essn, count(*) as cnt
      from dependent d
      group by d.essn
      having cnt >= 2
     ) d2
     on e.ssn = d2.essn
order by e.ssn;

【讨论】:

  • 感谢您的帮助,但我收到一个错误 Unknown column d.essn in the field list
猜你喜欢
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 2011-03-19
  • 2011-08-11
  • 2017-03-30
  • 1970-01-01
相关资源
最近更新 更多