2016-05-07 8 views
1

私は、次の表を作成しました:私の問題があるMySQLで特定の人を選択するには?

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); 

:同じ番号を持っている人を選択する方法

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) 

); 

を私は次の件のデータを挿入します。たとえば、 "Peter"や "Louis"などです。

答えて

1

は「同じ番号」ことによって、あなたは人のためにnumbersで一つだけの数があることを意味します。あなたはgroup byhavingでこれを行うことができます。

select n.id 
from numbers n 
group by n.id 
having min(number) = max(number); 

注:このアカウントにNULLを取ることはありません。値のいずれかがNULLであればあなたの質問は何をするかを指定しません。私が正しく理解していれば

+0

答えをあなたに@Gordon Linoffありがとうございます。しかし、数字ではなく文字列であれば、それをどうやって行うのですか? – Python241820

+0

@ Python241820。 。 。私はあなたの質問を理解していません。これは、文字列を含むほぼすべてのデータ型で機能します。 –

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]]番号付きなどに代わります

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 

これが返されます:1これは、あなたはあなたができるすべての人々とそれに関連付けられた番号のリストを望んでいた場合はピーター

この場合には数1にリンクされている人のリストを返しますユーザーID、名前、およびその関連番号。

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

+0

答えに感謝します。しかし、私は「ルイ」や「ピーター」MySQLは「ルイ」を示す続け、「ピーター」のための異なる他の番号を追加した場合。 – Python241820

+0

はい、それが意図されています。違うのですか?明確にすることはできますか?私はちょうどあなたの質問を再読み込み、そしてそれは*「同じ番号を持っている人を選択する方法」*と言うん。彼は少なくとも一度は同じ番号を持っている場合は、ルイスに別の番号を追加した場合でも、それは私はあなたの質問が明確ではなかったと思う...正です。 :-( – trincot

関連する問題