1

人間と車の 2 つのテーブルがあるとします。Table Car にはいくつかの列があり、そのうちの 1 つが Human_id です。たとえば、次のようにします。

Human_id Type
1        BMW
5        Mercedes
1        Audi
2        Peugeot
3        BMW
2        JEEP

複数の車を持っているすべての人間を選択するにはどうすればよいですか? つまり、Human_id 列で Human_id が複数回使用されているかどうかを制御する必要があります。しかし、どうすればそれができますか?

SELECT human.name
FROM Human, Car
WHERE .... <- what goes here??
4

4 に答える 4

1

Carレコードをでグループ化してみて、句Human_idを見てください。HAVING

于 2012-05-28T13:51:04.453 に答える
1
SELECT human.name, car.human_id, count(*) as total
FROM Human, Car
group by human.name, car.human_id
having count(*) > 1
于 2012-05-28T14:28:43.130 に答える
0

HumanテーブルとCarテーブルの間に FK がある場合は、デカルト積の代わりにJoinを使用することをお勧めします。

create table Human (
  idHuman integer primary key,
  name varchar(15),
   ...
);
insert into Human (idHuman, name) values
  (1,'A'), (2,'B'), (3,'C'), (4,'D'), (5,'E');

create table Car (
  Human_id integer REFERENCES Human ON DELETE CASCADE,
  Type varchar(15),
  ...
);
insert into Car (Human_id, Type) values 
  (1,'BMW'), (5,'Mercedes'), (1,'Audi')
 ,(2,'Peugeot'), (3,'BMW'), (2,'JEEP');

そしてクエリ:

select hu.name
from Human hu
join Car ca on (ca.Human_id = hu.idHuman)
group by hu.name
having count(*) > 1

私はあなたを助けることを願っています

于 2012-05-29T11:26:39.393 に答える
-1
 select human.name
 from human
 where human.id in
      select human.id
      from car
      where count(car) > 1
      group by human.id
于 2012-05-28T13:51:34.737 に答える