0

这是我要运行的查询:

UPDATE files set refcount=
   (
      SELECT count(*) 
      FROM comments WHERE data=files.id
   ) 
   WHERE id=?;

问题是,comments.data是一个文本列(出于其他原因)。所以我需要将files.id 转换为 STRING 而不是它是什么(一个 INT),否则不会使用comments.data索引。

例如,此查询运行良好:

SELECT count(*) FROM comments WHERE data='1234'; 

但这需要永远(因为它不能使用索引,评论有 10M 行):

SELECT count(*) FROM comments WHERE data=1234; 

也许我需要使用@vars 之类的?我试着把它放在引号中,但我认为它使用了文字“files.id”。

UPDATE files set refcount=
   (
      SELECT count(*) 
      FROM comments WHERE data='files.id'
   ) 
   WHERE id=?;
4

1 回答 1

0

您所要做的就是将 files.id 转换为字符串,然后再将其与数据进行比较

像这样的东西:

UPDATE files set refcount=
   (
      SELECT count(*) 
      FROM comments WHERE data=CAST(files.id AS vachar)
   ) 
   WHERE id=?;

是一个链接,展示了如何在 mysql 中使用强制转换函数和运算符。

更新:由于某些原因,CAST 似乎不适用于 varchar。虽然 char 可能会起作用(如果它不像 Timh 在下面的评论中所说的那样)CONCAT 可用于将其他类型转换为 varchar(当你用一个字符串连接其他类型,它返回一个字符串,用一个空字符串连接将作为某种转换:))

于 2012-07-06T08:12:16.847 回答