假设我有一个像下面如何在Mysql二进制文件中创建“In”运算符?
select * from table where column in (select other_column from other_table)
一份声明中,但我想在列“二进制”等于other_column这只是相匹配。有点像“二进制样”,但对于“in”运算符。
我希望问题很清楚。 谢谢:)
假设我有一个像下面如何在Mysql二进制文件中创建“In”运算符?
select * from table where column in (select other_column from other_table)
一份声明中,但我想在列“二进制”等于other_column这只是相匹配。有点像“二进制样”,但对于“in”运算符。
我希望问题很清楚。 谢谢:)
你可以这样做:
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
根据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