2013-04-26 39 views
1
+------------+---------------+ 
| BR_NAME | FACILITIES | 
+------------+---------------+ 
| headoffice | fixeddeposit | 
| headoffice | locker  | 
| headoffice | mobilebanking | 
| headoffice | netbanking | 
| zone1  | fixeddeposit | 
| zone1  | mobilebanking | 
| zone1  | netbanking | 
| zone2  | fixeddeposit | 
| zone2  | netbanking | 
| zone3  | fixeddeposit | 
| zone3  | locker  | 
| zone3  | netbanking | 
| zone4  | netbanking | 
| zone5  | locker  | 
| zone6  | fixeddeposit | 
| zone6  | locker  | 
| zone7  | locker  | 
| zone7  | mobilebanking | 
| zone8  | locker  | 
| zone8  | mobilebanking | 
| zone9  | locker  | 
+------------+---------------+ 

這是我的數據庫,我想找到同樣多值br_name屬性例如:zone7,zone8如何查詢它用mysql找到列有相同的多值屬性

+1

所以,開始做,當你嘗試自己,然後回到這裏。 – sashkello 2013-04-26 04:25:39

回答

2

你可以用做這樣的事情group_concatalso please see fiddle

CREATE TEMPORARY TABLE tt (BR_NAME VARCHAR(50),ALLFACILITIES VARCHAR(50)); 

INSERT INTO tt 
(SELECT 
    BR_NAME, 
    GROUP_CONCAT(FACILITIES) 
FROM 
    (SELECT * FROM t ORDER BY FACILITIES) as t1 
GROUP BY 
    BR_NAME); 

SELECT 
    GROUP_CONCAT(BR_NAME) AS BR_NAMES, 
    ALLFACILITIES 
FROM 
    tt 
GROUP BY 
    ALLFACILITIES 
HAVING 
    COUNT(*) > 1 

結果:

BR_NAMES  ALLFACILITIES 

zone9,zone5  locker 
zone7,zone8  mobilebanking,locker 

請注意,您可以刪除COUNT(*) > 1並獲取每個BR_NAME的設施。

0

可以使用group by和having做到這一點。

SELECT * FROM TableName group by BR_NAME having count(*) >= 2 

OR

SELECT *, COUNT(*) c FROM TableName GROUP BY BR_NAME HAVING c > 1; 
+0

其不計算 – Pradyumna 2013-04-26 04:47:24

+0

結果應該是區域7和區域8,因爲它們具有相同的設施不相同的計數 – Pradyumna 2013-04-26 04:48:08

+0

@perpetual我看到'zone6'和'zone2'也具有相同的計數。 – 2013-04-26 04:49:01

相關問題