1

これは、私が最近作成した以前の投稿と非常によく似ていますが、少し異なります。おなじみのように見える場合: 理解しようとしている私の学習曲線を許してください: 「このケースとそのケースはどうですか.....」

私はうまくいく素敵な小さなクエリを持っています。単一の「Clients」テーブルを照会します

ここにテーブルがあります: SQLFiddle はここにあります: http://sqlfiddle.com/#!2/1fcea

CREATE  TABLE `clients` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NULL ,
  `address` VARCHAR(45) NULL ,
  `state` VARCHAR(45) NULL ,
  `foo` VARCHAR(45) NULL ,
  `phone` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) );

INSERT INTO`clients` 
   (`name`, `address`, `state`, `foo`, `phone`) 
 VALUES 
   ('Jim', '123 Main', 'MO', '876', '2038221661');
INSERT INTO`clients` 
   (`name`, `address`, `state`, `foo`, `phone`) 
 VALUES 
   ('Tom ', '234 Elm', 'MO', '433', '2038221661');
INSERT INTO`clients` 
   (`name`, `address`, `state`, `foo`, `phone`) 
 VALUES 
   ('Steve', '653 Pine', 'CT', '863', '5125901977');
INSERT INTO`clients` 
   (`name`, `address`, `state`, `foo`, `phone`) 
 VALUES 
   ('Dave', '654 Oak', 'NV', '872', '8769085435');
INSERT INTO`clients` 
   (`name`, `address`, `state`, `foo`, `phone`) 
 VALUES 
   ('Oscar', '622 FIrst ', 'LA', '625', '5125551212');

ここにクエリがあります

SELECT id, 
       name, 
       address, 
       phone 
FROM   clients 
WHERE  state IN ( 'MO', 'LA', 'CT' ) 
       AND foo > 40 
ORDER  BY foo 

戻り値:

2   Tom     234 Elm     2038221661
5   Oscar   622 First   5125551212
3   Steve   653 Pine    5125901977
1   Jim     123 Main    2038221661

完全に一意の電話番号を持たないレコードを完全に抑制したい.

(1)ジムと(2)トムとリターンを抑える必要がある

5   Oscar   622 First   5125551212
3   Steve   653 Pine    5125901977
4

3 に答える 3

2

あなたは実際にこれを行うことができますgroup by

SELECT id, name, address, phone 
FROM   clients 
WHERE  state IN ( 'MO', 'LA', 'CT' ) AND foo > 40 
group by phone
having count(*) = 1
ORDER  BY foo;

これは電話番号ごとにグループ化されます。、idnameおよびaddressは、任意のレコードから取得されます。havingただし、(句により) 1 つしかないため、これらはその 1 つのレコードのフィールドになります。

于 2013-07-18T02:18:47.253 に答える
1

これにより、重複した番号を除外する必要があります。

SELECT id, 
   name, 
   address, 
   phone 
FROM   clients 
WHERE  state IN ( 'MO', 'LA', 'CT' ) 
   AND foo > 40 
   AND phone not in (select phone from clients 
                    group by phone having count(*) > 1)
ORDER  BY foo 
于 2013-07-18T00:09:06.683 に答える