首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询:显示特定列

MySQL查询:显示特定列
EN

Stack Overflow用户
提问于 2016-07-21 08:02:40
回答 2查看 79关注 0票数 0

假设我的桌子上有五根柱子。

第1栏:商店名称;第2至第5栏:存储类型

对于商店的名称,它基本上只包含商店的名称。对于列2-5,它将包含“是”或“否”,这取决于存储类型。例如:

代码语言:javascript
复制
StoreName    | Clot. | Food | App. | Shoes 
Mcdonalds    |  NO   | YES  |  NO  |  NO
MC ShoeStore |  NO   | NO   |  NO  |  YES

现在,我想提出一个查询,在这个查询中,我将显示以字母M开头的所有商店,以及它们的存储类型,而不显示带有“NO”的其他商店类型。

我只知道:

代码语言:javascript
复制
SELECT NameOfStore from table where NameOfStore LIKE '%m'

我不确定如何显示包含YES的商店类型。那有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-21 08:12:03

您可以简单地使用case语句。此外,您的WHERE子句标准也是错误的。

代码语言:javascript
复制
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%';

处理单个存储的多个存储类型:

代码语言:javascript
复制
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%';

您的输出将类似于:

代码语言:javascript
复制
NameOfStore   |   TypeOfStore
-----------------------------
McDonalds     |   Fastfood
Mike's Shop   |   Clothes & Shoes
票数 0
EN

Stack Overflow用户

发布于 2016-07-21 08:17:49

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

存储

代码语言:javascript
复制
+--+---------+-------------+
|id|name     |store_type_id|
+--+---------+-------------+
| 1|Mcdonalds|            2|
| 2|Mc Shoes |            4|

store_type

代码语言:javascript
复制
+--+-----------+
|id|name       |
+--+-----------+
| 1|Clothing   |
| 2|Fastfood   |
| 3|Applicances|
| 4|Shoes      |

然后,您可以简单地将商店类型加入到商店中。

代码语言:javascript
复制
SELECT
    store.name,
    store_type.name AS store_type
FROM
    store
    LEFT JOIN store_type ON store.store_type_id = store_type.id

如果一个存储可以有多个类型,您将使用结合表来链接这两个类型,而不是存储表中的store_type_id列。

store_store_types

代码语言:javascript
复制
+--------+-------------+
|store_id|store_type_id|
+--------+-------------+
|       1|            2|
|       2|            1|
|       2|            4|

而查询..。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38498393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档