首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个"where“-s从一个表放到一个视图中

将多个"where“-s从一个表放到一个视图中
EN

Stack Overflow用户
提问于 2010-11-07 17:35:40
回答 3查看 51关注 0票数 0

我有一个名为"users“的表,其中有4个字段: ID、联E、名称、SHOW_NAME。

我希望将这些数据放入一个视图中,以便如果未设置SHOW_NAME,则应选择“联伊”作为“名称”,否则选择“名称”。

我现在的问题是:

代码语言:javascript
复制
SELECT id AS id, uname AS name 
FROM users 
WHERE show_name != 1 
 UNION 
SELECT id AS id, name AS name 
FROM users 
WHERE show_name = 1

这通常是可行的,但它似乎确实丢失了主键(NaviCat告诉我"users_view没有主键...“)--我认为这很糟糕。

有没有更好的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-07 17:38:29

这应该没问题。我不知道为什么它会抱怨主键丢失。

我将提供一条建议。当您知道您的联合中不能有重复项(例如,两个部分分别是when x = 1when x != 1)时,您应该使用union all

union子句将尝试删除重复项,在这种情况下,这是浪费时间。

如果您需要更有针对性的帮助,最好是发布视图和底层表的详细信息。视图本身并不倾向于拥有主键或索引,而是依赖于底层的表。

因此,这很可能是您的"NaviCat“产品(不管是什么)期望看到一个主键(换句话说,它不是很好地为视图构建的)的问题。

票数 1
EN

Stack Overflow用户

发布于 2010-11-07 17:42:25

如果我正确理解了您的问题,您应该能够使用下面这样的CASE语句作为您的逻辑

代码语言:javascript
复制
SELECT 
    CASE WHEN SHOW_NAME ==1 THEN NAME ELSE UNAME END
FROM users 
票数 1
EN

Stack Overflow用户

发布于 2010-11-07 17:43:23

这可能更好地写成以下代码:

选择id作为id,如果(show_name == 1,name,uname)作为来自用户的名称

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4117183

复制
相关文章

相似问题

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