我有一个查询,看起来像这样:
SELECT p.prodname, p.prodcode, o.vovalue, p.productid, i.imageprodid, c.vcstock, p.prodcatids, t.catname
FROM isc_products p
LEFT OUTER JOIN isc_product_variation_combinations c ON c.vcproductid = p.productid
LEFT OUTER JOIN isc_product_variations v ON v.variationid = c.vcvariationid
LEFT OUTER JOIN isc_product_variation_options o ON o.voptionid = c.vcoptionids
LEFT OUTER JOIN isc_product_images i ON i.imageprodid = p.productid
LEFT OUTER JOIN isc_categories t ON t.categoryid = p.prodcatids
WHERE c.vcstock >1
AND i.imageprodid IS NULL
ORDER BY ca.catname我正在尝试检索列中的类别名称(t.catname)。由于t.categoryid = p.prodcatids的连接,它返回一个空值。
p.prodcatids是文本(utf8_general),t.categoryid是int(11)。
如何转换(强制转换?)p.prodcatids作为int11,这样它就会加入到t.categoryid上?
发布于 2012-06-04 08:57:47
如果这是在mysql中-你有没有检查转换和转换函数?http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast
发布于 2012-06-04 08:58:20
CAST(p.prodcatids AS UNSIGNED)应该能胜任这项工作
发布于 2012-06-04 10:08:45
只有几个音符。
事实上,您可以进行强制转换以获得所需的结果,但这并不能替代具有适当的数据结构。您应该使所有外键都与主键具有相同的类型。特别是,这会对查询优化器造成严重破坏,并且通常会保证嵌套循环连接(效率最低的一种)。
此外,当您遇到这种情况时,从字符数据类型转换出来通常更准确。这是因为cast函数可能与其他字段不完全匹配。例如,"100“不等于"100.00”。
然而,这引入了转换失败的可能性。某些数据库(例如SQL Server )提供了诸如isnumeric和isdate之类的函数来处理这种情况。其他人则不这样做。
https://stackoverflow.com/questions/10875196
复制相似问题