场景:表中包含有group_id,worker_id,status字段,查询这三个字段是否存在重复的数据。
创新互联专注于鸡冠企业网站建设,响应式网站,成都做商城网站。鸡冠网站建设公司,为鸡冠等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
查找某个人在某个班组内存在多个status为0的数据
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来,并设置status为1
将查询查询结果作为where in的条件,需要select的结果再通过一个中间表select多一次,否则会报You can't specify target table for update in FROM clause。
MySQL查询重复字段,及删除重复记录的方法
数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较。如果仅仅是查找数据库中name不重复的字段,很容易:
SELECT min(`id`),`name` FROM `table` GROUP BY `name`;
但是这样并不能得到说有重复字段的id值。(只得到了最小的一个id值)查询哪些字段是重复的也容易:
SELECT `name`,count(`name`) as count FROM `table` GROUP BY `name` HAVING count(`name`) 1 ORDER BY count DESC;
但是要一次查询到重复字段的id值,就必须使用子查询了,于是使用下面的语句。
SELECT `id`,`name` FROM `table` WHERE `name` in (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) 1);
但是这条语句在mysql中效率太差,感觉mysql并没有为子查询生成零时表。于是使用先建立零时表:
create table `tmptable` as (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) 1);
作者:镜音连改二
链接:
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
SELECT
apply.org_name AS 分公司,
n.statusdes AS 实时状态,
operation_log.apply_id,
operation_log.operator_name AS 合同复核操作人,
max(
operation_log.operation_time
) AS 合同复核时间,
contract.contract_number AS 合同编号,
contract.actual_loan_time AS 实际放款时间,
contract.loan_amount AS 合同金额FROM
operation_logLEFT JOIN contract ON contract.apply_id = operation_log.apply_idLEFT JOIN apply ON apply.apply_id = operation_log.apply_idLEFT JOIN (
SELECT
group_concat(
DISTINCT c.status_code SEPARATOR '||'
) AS statussum,
c.is_in_node,
c.apply_id,
group_concat(
DISTINCT c.status_name SEPARATOR '||'
) AS statusdes,
group_concat(
DISTINCT c.operator_name SEPARATOR '||'
) AS operatornames
FROM
node_record c
WHERE
c.is_in_node = 1
AND c.is_valid = 1
GROUP BY
c.apply_id) n ON apply.apply_id = n.apply_idWHERE
operation_time = "2016-11-1"AND before_status_name = "合同复核中"AND end_status_name = "合同复核完成"AND operation_log.node_code = "REVIEW"AND apply.is_ex_apply = '1'AND apply.borrowing_type = '1'AND operation_log.operator_name NOT LIKE "%测试%"GROUP BY
apply.org_name,
n.statusdes,
operation_log.apply_id,
operation_log.operator_name,
DATE(
operation_log.operation_time
),
contract.contract_number,
contract.actual_loan_time,
contract.loan_amount
可以新建立一张表,
把重复数据的字段设置为索引,
不允许重复,再把之前的表数据导入到新建立的表中,
这样就可以过滤掉重复内容了。