-4

簡単にするために、名前、住所、本籍地の 3 つの列を持つ MYSQL テーブルがあります。

名前が重複する行が存在する可能性があります。個人の名前と住所を返す select ステートメントを作成したいと考えています。それらがテーブルに 2 回ある場合は、2 つのアドレスがあることを意味します。ただし、そのうちの1つが「主な住居」である場合は、主な住居のみを返します。それ以外の場合は、両方のアドレスを返す必要があります。ありがとう!

テーブル:

Name | Address | Primary Residence
John Smith | 123 Main Str | Yes
John Smith | 456 June Str | 
Mike Dore  | 893 West St  |
Jake John  | 999 East St  |
Jake John  | 145 South St |

戻り値:

Name | Address
John Smith | 123 Main Str
Mike Dore  | 893 West St
Jake John  | 999 East St
Jake John  | 145 South St
4

2 に答える 2

3

これが1つの方法です...

CREATE TABLE addresses 
(Name VARCHAR(20) NOT NULL
,Address VARCHAR(20) NOT NULL
,is_primary TINYINT NULL
,PRIMARY KEY (name,address)
);

INSERT INTO addresses VALUES
('John Smith','123 Main Str',1),
('John Smith','456 June Str',NULL),
('Mike Dore','893 West St',NULL),
('Jake John','999 East St',NULL),
('Jake John','145 South St',NULL);


SELECT * FROM addresses;
+------------+--------------+------------+
| Name       | Address      | is_primary |
+------------+--------------+------------+
| Jake John  | 145 South St |       NULL |
| Jake John  | 999 East St  |       NULL |
| John Smith | 123 Main Str |          1 |
| John Smith | 456 June Str |       NULL |
| Mike Dore  | 893 West St  |       NULL |
+------------+--------------+------------+

SELECT DISTINCT x.name
              , COALESCE(y.address,x.address) address
           FROM addresses x 
           LEFT 
           JOIN addresses y 
             ON y.name = x.name 
            AND y.is_primary = 1;
+------------+--------------+
| name       | address      |
+------------+--------------+
| Jake John  | 145 South St |
| Jake John  | 999 East St  |
| John Smith | 123 Main Str |
| Mike Dore  | 893 West St  |
+------------+--------------+
于 2013-07-19T11:05:22.010 に答える
2

サブクエリで実行できます。

select * from TBL where NAME not in (select NAME from TBL where residence='PRI')
union 
select * from TBL where residence='PRI';

編集:質問の更新後:

select * from TBL where NAME not in (select NAME from TBL where residence='yes')
union 
select * from TBL where residence='yes'

http://sqlfiddle.com/#!2/39493/5/0

于 2013-07-19T10:49:00.287 に答える