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 是文本 (utf8_general),t.categoryid 是 int(11)。

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

4

3 回答 3

2
CAST(p.prodcatids AS UNSIGNED)

应该做的工作

于 2012-06-04T00:58:19.857 回答
2

只是一些笔记。

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

此外,当您遇到这种情况时,从字符数据类型转换出来通常更准确。这是因为 cast 函数可能与其他字段不完全匹配。例如“100”不等于“100.00”。

然而,这引入了演员阵容失败的可能性。一些数据库,如 SQL Server,提供了 isnumeric 和 isdate 等函数来处理这种情况。其他人没有。

于 2012-06-04T02:08:45.150 回答
1

如果这是在 mysql 中-您是否检查了转换和转换功能?http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast

于 2012-06-04T00:57:46.953 回答