Mysql内连接查询用法

时间:2014-07-29 09:43:37

标签: mysql inner-join

这是两个表:一个类别表和另一个产品表

类别表

id     name
1      mealA
2     mealB

产品表

id     name     category_id ( refer to category table)
1     chicken     1,2
2     fries      1
3     tomato     2

SELECT * FROM product INNER JOIN category on product.category_id = category.id where category.name='mealA'

我有点震惊地发现 chicken 作为结果显示(通过其他人的代码)。这是我第一次知道我可以直接用其他专栏inner join逗号分隔专栏。

我在网上做过研究,似乎在mysql中使用find_in_set有另一个答案,为什么内部联接能够做到这一点,任何人都可以帮忙解释一下吗?

2 个答案:

答案 0 :(得分:2)

我认为这不如你想象的那样有效;它不应该。

我猜测product.category_id = category.id正在将product.category_id转换为INT进行比较,从而从1获取与'1,2'匹配的1来自category表的{1}}。

我更喜欢将正确定义的HAS_MANY关系(每个类别关系一行)更改为CSV字段,尤其是供参考。其他任何事情都会带来复杂的世界。

答案 1 :(得分:1)

将整数列(category.id)与字符串列(product.category_id)进行比较时,在执行比较之前将字符串值转换为整数。将字符串转换为整数时,它会忽略初始数字部分之后的所有内容,因此字符串1,2将转换为数字1

因此chicken将匹配mealA,但它不会与mealB匹配,因为2位于,之后。