2013-07-19 120 views
-4

我有一個MYSQL表 - - 爲了簡化它 - 三欄:名稱,地址和主要住所。MYSQL選擇和組如果列值

可以有重複名稱的行。我想做一個選擇語句來返回一個人的姓名和地址。如果他們在表格中兩次,這意味着他們有兩個地址。但是,如果其中一個是「主要住宅」,我希望它只返回主要住宅。否則,它應該返回兩個地址。 謝謝!

表:

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 
+5

我們不是一個代碼編寫的服務。到目前爲止你做了什麼? –

+0

我已經在PHP中完成了它,但我想知道它是否可以在一行MYSQL中完成。我想不出任何事情;尋找方向。 – danielb

+1

然後你需要一位導師或導師,而不是問答網站。 –

回答

3

這裏有一種方法......

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 | 
+------------+--------------+ 
+1

+1,考慮到問題描述,你的答案是正確的,而不是被接受的答案。太糟糕了。 – fancyPants

+0

+1有用的提示如何完成 – jaczes

2

它可能與子查詢來完成。

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

編輯: AFTER問題UPDATE:

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

+0

我剛剛開始玩數據庫管理員。當我看到草莓的回覆時,我想「他知道怎麼玩!」。 – jaczes