多个“where”-s从一个表到一个视图

时间:2010-11-07 09:35:40

标签: mysql

我有一个名为“users”的表格,其中有4个字段:ID,UNAME,NAME,SHOW_NAME。

我希望将此数据放入一个视图中,这样如果未设置SHOW_NAME,则应选择“UNAME”作为“NAME”,否则选择“NAME”。

我当前的查询:

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没有主键......”) - 我觉得这很糟糕。

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

那应该没问题。我不确定为什么抱怨丢失主键。

我会提供一条建议。如果知道您的联盟中没有重复内容(例如when x = 1when x != 1这两个部分),则应使用union all

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

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

因此,这可能是您的“NaviCat”产品(无论 )期望看到主键(换句话说,它不能很好地构建视图)的问题。

答案 1 :(得分:1)

如果我正确理解你的问题,你应该只能使用下面的CASE语句作为你的逻辑

SELECT 
    CASE WHEN SHOW_NAME ==1 THEN NAME ELSE UNAME END
FROM users 

答案 2 :(得分:1)

这可能更好地写成如下:

SELECT id AS id,IF(show_name == 1,name,uname)AS名称 来自用户