2012-06-04 29 views
0

我有一个查询,看起来像这样:将文本转换为在诠释一个加入(铸造?)

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的加入,它返回一个NULL值。

p.prodcatids是text(utf8_general),t.categoryid是int(11)。

我该如何转换(转换?)p.prodcatids为int11,以便它将加入t.categoryid?

回答

2
CAST(p.prodcatids AS UNSIGNED) 

应该做的工作

2

只是一对夫妇的音符。

事实上,你可以做一个强制转换以获得所需的结果,但不能替代具有适当的数据结构。您应该让所有外键与主键相同。特别是,这会对查询优化器造成严重破坏,并且通常会保证嵌套循环连接(效率最低的类型)。

另外,当出现这种情况时,通常将字符数据类型转换为更准确。这是因为演员功能可能不完全匹配其他领域。例如“100”不等于“100.00”。

但是,这引入了剧组失败的可能性。某些数据库(如SQL Server)提供诸如isnumeric和isdate之类的函数来处理这种情况。其他人没有。