2012-07-07 44 views
1

假设我有一个像下面如何在Mysql二进制文件中创建“In”运算符?

select * from table where column in (select other_column from other_table) 

一份声明中,但我想在列“二进制”等于other_column这只是相匹配。有点像“二进制样”,但对于“in”运算符。

我希望问题很清楚。 谢谢:)

回答

1

你可以这样做:

select * from table where BINARY column in (select other_column from other_table) 

select * from table where column in (select BINARY other_column from other_table) 

但性能这两个人将是可怕的,因为你是king mysql在对其进行比较之前对所有值进行类型转换。

将查询重写为JOIN会更好,因为它可能会引发另一个注释,但是您仍然有加入某个正在进行类型转换的值的问题,并且您无法使用索引。

比那还好

是,如果你想区分在这一领域的敏感和准确的比较,然后更改表中的字符集,以二进制文件的列,或者使用与_cs归类

像往常一样,该手册将告诉您全部MySQL Character sets and Collations

1

根据the manual

返回1如果expr等于任何在IN列表中的值,否则返回0。如果所有值都是常数,则根据expr的类型对它们进行评估并分类。然后搜索该项目是使用二进制搜索完成的。这意味着IN非常快速,如果IN值列表完全由常量组成。否则,根据Section 12.2, “Type Conversion in Expression Evaluation”中描述的规则进行类型转换,但适用于所有参数。

当然,在你的例子一个随时可以替换为IN联接:

SELECT * FROM table JOIN other_table ON table.column = other_table.other_column