我的查询看起来像四个数字:
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
我能找到的一切都是关于从表格和结果中删除重复项,但我无法找到有关此方案的任何内容。
答案 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