MySQL查询:显示特定列

时间:2016-07-21 08:02:41

标签: mysql sql

我们说我的桌子上有五列。

第1列:商店名称和第2至5列:商店类型

对于商店名称,它基本上只包含商店的名称。对于第2-5列,它将包含YES或NO,具体取决于它的商店类型。例如:

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

现在我想提出一个查询,其中我显示所有以字母M开头的商店及其商店类型,而其他商店类型没有' NO'在它出现。

我只知道:

SELECT NameOfStore from table where NameOfStore LIKE '%m'

我不确定我将如何显示包含YES的商店类型。或者这可能吗?

2 个答案:

答案 0 :(得分:1)

为了更灵活,我建议您先更改数据结构。

商店

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

store_type

+--+-----------+
|id|name       |
+--+-----------+
| 1|Clothing   |
| 2|Fastfood   |
| 3|Applicances|
| 4|Shoes      |

然后,您只需将商店类型加入商店即可。

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

答案 1 :(得分:0)

您可以简单地使用案例陈述。此外,您的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