保留MySQL结果中的重复项

时间:2015-12-22 19:13:41

标签: mysql

我的查询看起来像四个数字:

select * from accounts where number in (000208,000208,001106,001110);

结果我看起来像这样有三个数字,这是有道理的,因为000208在那里两次:

number id
000208 904
001106 574
001110 1580

但我想知道是否有办法获得这些结果:

number id
000208 904
000208 904
001106 574
001110 1580

我能找到的一切都是关于从表格和结果中删除重复项,但我无法找到有关此方案的任何内容。

4 个答案:

答案 0 :(得分:1)

您也可以使用临时表

DROP TEMPORARY TABLE IF EXISTS ids;

CREATE TEMPORARY TABLE ids 
( 
 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
  number INTEGER, 
  PRIMARY KEY (`id`)
);

INSERT INTO ids (number) VALUES (1),(1),(2);

SELECT a.* 
  FROM ids i
  LEFT JOIN accounts a ON a.number = i.number;

答案 1 :(得分:0)

您可以使用left join

执行此操作
select a.*
from (select 000208 as number union all
      select 000208 union all
      select 001106 union all
      select 001110
     ) n left jion
     accounts a
     on n.number = a.number;

答案 2 :(得分:0)

IN子句中两次使用相同的项目意味着什么。

此查询:

select * from accounts where number in (000208,000208,001106,001110);

与此完全相同:

select * from accounts where number in (000208,001106,001110);

两次获得相同结果的方式不依赖于查询,而是取决于表格内的数据 - 如果你在表格中有两次(假设表格允许复制),您将获得两次,在查询中使用000208一次或两次

答案 3 :(得分:0)

有两种方法可以做到这一点 下面使用UNION生成所需的行,第二个选项是创建临时表并与

连接
SELECT *
FROM accounts
INNER JOIN (
SELECT 000208 AS number
  UNION ALL SELECT 000208
  UNION ALL SELECT 001106
  UNION ALL SELECT 001110
) a1 ON accounts.number = a1.number