Mysql:如何从 ENUM 中检索一个字段不包含特定值的行列表

Mysql : how to retrieve a list of row where one field doesn't contain a specific value from an ENUM

我有一个 table,其中列出了用户相册。

主键、用户键、类型和标题。

TYPE 字段是一个 ENUM。

通常每个用户都有一个 'avatar' 类型的条目在注册时自动创建,但似乎没有。

我想要一个可以输出没有任何 'avatar' 类型条目关联的用户密钥的查询。

我认为这个查询可以解决问题:

   SELECT * FROM (
           SELECT DISTINCT user_key FROM `album` WHERE 1
   ) a
   OUTER JOIN (
           SELECT  user_key FROM `album` WHERE type = 'avatar'
   ) b
   ON a.user_key = b.user_key 

目标是 select 来自 table 的每个不同用户,然后是每个具有 'avatar' 条目的用户,最后进行外部连接以便仅检索没有该条目的用户。

通过内部联接,我得到了包含此条目的正确用户列表(这没有解决我的问题),但是通过外部联接,我得到了语法错误。

我是不是在使用外连接时出错了,还是有更聪明的方法来获得我想要的东西?

谢谢。

如果我对这个问题的理解正确,您只需要 user_key 列用于所有类型不是 'avatar'

的用户
SELECT DISTINCT(user_key) FROM album WHERE type IS NOT IN ('avatar')

MySQL中没有"OUTER JOIN"! ,您应该使用 "LEFT | RIGHT JOIN",对于完整的外部联接,您可以像这样 UNION 它们:

SELECT * FROM table1 a
LEFT JOIN table2 b ON a.user_key = b.user_key
UNION
SELECT * FROM table1 a
LEFT JOIN table2 b ON a.user_key = b.user_key

但似乎不需要加入选择!,如果你想获得类型字段中没有 'avatar' 的用户列表,你应该这样做:

SELECT DISTINCT(user_Key) FROM albums WHERE Type <> 'avatar'
AND user_key NOT IN (Select DISTINCT(user_key) FROM albums WHERE Type = 'avatar');

ENUM 类型不需要使用"NOT IN",因为ENUM 类型只有一个值,而SET 类型有一些值