我有一个名为"users“的表,其中有4个字段: ID、联E、名称、SHOW_NAME。
我希望将这些数据放入一个视图中,以便如果未设置SHOW_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没有主键...“)--我认为这很糟糕。
有没有更好的方法?
发布于 2010-11-07 17:38:29
这应该没问题。我不知道为什么它会抱怨主键丢失。
我将提供一条建议。当您知道您的联合中不能有重复项(例如,两个部分分别是when x = 1和when x != 1)时,您应该使用union all。
union子句将尝试删除重复项,在这种情况下,这是浪费时间。
如果您需要更有针对性的帮助,最好是发布视图和底层表的详细信息。视图本身并不倾向于拥有主键或索引,而是依赖于底层的表。
因此,这很可能是您的"NaviCat“产品(不管是什么)期望看到一个主键(换句话说,它不是很好地为视图构建的)的问题。
发布于 2010-11-07 17:42:25
如果我正确理解了您的问题,您应该能够使用下面这样的CASE语句作为您的逻辑
SELECT
CASE WHEN SHOW_NAME ==1 THEN NAME ELSE UNAME END
FROM users 发布于 2010-11-07 17:43:23
这可能更好地写成以下代码:
选择id作为id,如果(show_name == 1,name,uname)作为来自用户的名称
https://stackoverflow.com/questions/4117183
复制相似问题