【问题标题】:Mysql enum with where in Clause带有 where 子句的 Mysql 枚举
【发布时间】:2013-12-18 04:43:23
【问题描述】:

我有两张桌子

tweets(id,user_id,lang); 
//lang is enum (en,fr,ar,ch)

user(id,accepted_lang); 
// accepted_lang is varchar and can vary like en,ar OR ar,fa OR en,fa etc

我想选择用户接受的所有语言的推文。

select * from tweets where lang in (select accepted_lang from user where id=16); 
#return 0 row

如果我用它的结果 fa,ar 替换 select accepted_lang from user where id=16 它将返回一些行

select * from tweets where lang in ('fa','ar');
#return some of rows

所以实际上我的问题是如何将 varchar 转换为 enum 或 table

【问题讨论】:

  • 那么到底是什么问题呢?这里的“不工作”是什么意思?你得到一个错误,或者错误的结果,或者什么都没有?请提供更多细节。另外,您在标题中提到了like,但我没有看到任何有问题的like 子句。
  • 我猜它会使用like子句,但不知道如何
  • 不,它不会使用LIKE 子句。它可能使用IN 子句(具体取决于您要做什么),但不是LIKELIKE 对枚举字段毫无意义。
  • 您的评论很有帮助,请重新检查有问题的查询。

标签: mysql select enums where-in


【解决方案1】:

可能是因为您没有提到第二个表,并且在查询中得到了 user_lang 而不是接受的_lang

select * from tweets, user where tweet_lang = accepted_lang and user.id=5

但是您可能希望接受来自特定用户的所有推文

select * from tweets
left join user on tweets.user_id = user.id
where -- your conditions here

【讨论】:

  • 请再次检查问题
  • 我刚刚修改了问题,现在更清楚了。
  • id 是用户表中的主(唯一)键吗?如果accepted_lang 是一个枚举,那么它只能包含一个值;如果是字符串或其他内容,则它可能包含多个值。请将表格架构添加到您的问题中
  • id 是主要的,如果我将 query select accepted_lang from user where id=16 替换为其结果 fa,ar in query select * from tweets where lang in (select accepted_lang from user where id=16);它会正常工作的。
  • accepted_lang 只能保存 ONE 的 fa,因为枚举只能保存单个值。这就是为什么你只会得到一些结果
【解决方案2】:

您的查询应该是这样的:

SELECT * FROM tweets, user 
     WHERE tweets.tweet_lang = user.accepted_lang 
           AND user.id=5

由于没有名为 user_lang 的列,这可能是accepted_lang

【讨论】:

  • 刚刚修改了我的问题,请立即查看。
猜你喜欢
  • 2015-05-28
  • 2015-07-16
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多