如何在MySQL中选择特定的人?

时间:2016-05-07 16:15:27

标签: mysql sql

我创建了以下表格:

create table people
(
        ID               varchar(10),
        name             varchar(35),

CONSTRAINT pk_ID PRIMARY KEY (ID)

);

create table numbers
(
        code             varchar(10),
        ID               varchar(10),
        number           numeric,

CONSTRAINT pk_code PRIMARY KEY (code)

);

我插入了以下数据:

insert into people(ID, name) 
values('fdx1','Peter');
insert into people(ID, name) 
values('fdx2','Alice');
insert into people(ID, name) 
values('fdx3','Louis');

insert into numbers(code, ID, number) 
values('001','fdx1',1);
insert into numbers(code, ID, number) 
values('002','fdx1',1);
insert into numbers(code, ID, number) 
values('003','fdx2',2);
insert into numbers(code, ID, number) 
values('004','fdx2',3);
insert into numbers(code, ID, number) 
values('005','fdx3',4);
insert into numbers(code, ID, number) 
values('006','fdx3',4);

我的问题是:如何选择号码相同的人。例如“彼得”和“路易斯”。

3 个答案:

答案 0 :(得分:1)

“相同的数字”表示此人numbers中只有一个数字。您可以使用group byhaving

执行此操作
select n.id
from numbers n
group by n.id
having min(number) = max(number);

注意:这不会考虑NULL。如果其中一个值为NULL,则您的问题未指定要执行的操作。

答案 1 :(得分:1)

如果我理解正确,您希望从具有相同数字两次的数字中的每个用户中看出2行?如果是这样你就可以做到。

SELECT p.ID, p.name, p.number, COUNT(DISTINCT n.id) as num
FROM people as p
INNER JOIN numbers as n on n.ID = p.ID
GROUP BY p.ID, n.number
HAVING num > 1

将返回一个人员列表,如何多次使用相同的数字

如果这不是您正在寻找的其他东西,您可以做的是:

要返回特定号码的人员列表,您可以执行以下操作

SELECT p.ID, p.name
FROM people as p
INNER JOIN numbers as n on n.ID = p.ID
WHERE n.number = [[X]]

您可以将[[X]]替换为例如1然后,这将返回在这种情况下链接到数字1的人员列表彼得

如果您想要所有人及其相关号码的列表,您可以这样做:

SELECT p.ID, p.name, n.number
FROM people as p
INNER JOIN numbers as n on n.ID = p.ID
ORDER BY n.number

这将返回用户ID,名称及其相关联的号码。

答案 2 :(得分:1)

您可以使用此查询:

select     p.name, n.number, count(*) repeats
from       people p
inner join numbers n on n.ID = p.ID
group by   p.id, n.number
having     count(*) > 1

列出了重复号码的人员姓名。该数字包含在输出中,以及它出现的次数。

输出:

|  name | number | repeats |
|-------|--------|---------|
| Peter |      1 |       2 |
| Louis |      4 |       2 |

sql fiddle