2016-07-21 55 views
0

假設我的表中有五列。MySQL查詢:顯示特定列

1列:商店的名稱和列2到5:存儲類型

對於存儲的名稱,它將基本上只包含商店的名稱。對於第2-5列,它將包含YES或NO,具體取決於它的商店類型。例如:

StoreName | Clot. | Food | App. | Shoes 
Mcdonalds | NO | YES | NO | NO 
MC ShoeStore | NO | NO | NO | YES 

現在我要拿出一個查詢,其中我會開始顯示在它出現的字母M和他們的商店類型沒有其他存儲類型與「否」的所有門店。

我只知道:

SELECT NameOfStore from table where NameOfStore LIKE '%m' 

我不知道對我怎麼回事,顯示Store類型,其中包含一個YES。或者是可能的?

+1

能商店有一個以上的 '是' 嗎?像同一店鋪的'CLOTHING = YES'和'SHOES = YES'一樣? – Nicarus

+0

商店銷售鞋子和衣服是非常有可能的。 – AndyMarty

+1

好的 - 您想如何在結果中展示? – Nicarus

回答

0

您可以簡單地使用case語句。此外,您的WHERE條款標準是錯誤的。

SELECT 
    NameOfStore, 
    CASE 
     WHEN Clothes = 'YES' THEN 'Clothes' 
     WHEN Fastfood = 'YES' THEN 'Fastfood' 
     WHEN Appliances = 'YES' THEN 'Appliances' 
     WHEN Shoes = 'YES' THEN 'Shoes' 
    END AS TypeOfStore 
FROM 
    table 
WHERE 
    LOWER(NameOfStore) LIKE 'm%'; 

處理多種存儲類型爲單店:

SELECT 
    NameOfStore, 
    CONCAT_WS(' & ', --This is the separator to use - you can replace this with whatever 
    CASE WHEN Clothes = 'YES' THEN 'Clothes' END, 
    CASE WHEN Fastfood = 'YES' THEN 'Fastfood' END, 
    CASE WHEN Appliances = 'YES' THEN 'Appliances' END, 
    CASE WHEN Shoes = 'YES' THEN 'Shoes' END 
    ) AS TypeOfStore 
FROM 
    table 
WHERE 
    LOWER(NameOfStore) LIKE 'm%'; 

你的輸出會看起來像:

NameOfStore | TypeOfStore 
----------------------------- 
McDonalds  | Fastfood 
Mike's Shop | Clothes & Shoes 
+0

它工作。謝謝。 LOWER又做了什麼? – AndyMarty

+0

'LOWER()'降低一個字符串。只使用'LIKE'm%''只會在名稱的開頭匹配小寫'm'的商店。我將商店名稱設置爲小寫,以匹配在名稱開頭爲 – Nicarus

+0

的任何具有較低或大寫'm'的商店哦。好的。謝謝! – AndyMarty

1

更靈活,我建議你先修改您的數據結構。

+--+---------+-------------+ 
|id|name  |store_type_id| 
+--+---------+-------------+ 
| 1|Mcdonalds|   2| 
| 2|Mc Shoes |   4| 

store_type

​​

然後,您只需加入商店類型的商店。

SELECT 
    store.name, 
    store_type.name AS store_type 
FROM 
    store 
    LEFT JOIN store_type ON store.store_type_id = store_type.id 

如果商店可以有不止一種類型的,你會使用associative table在存儲表將兩者結合起來的store_type_id柱代替。

store_store_types

+--------+-------------+ 
|store_id|store_type_id| 
+--------+-------------+ 
|  1|   2| 
|  2|   1| 
|  2|   4| 

和查詢......

SELECT 
    store.name, 
    store_type.name AS store_type 
FROM 
    store 
    LEFT JOIN store_store_type rel ON store.id = rel.store_id 
    LEFT JOIN store_type ON rel.store_type_id = store_type.id