这是两个表:一个类别表和另一个产品表
类别表
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
有另一个答案,为什么内部联接能够做到这一点,任何人都可以帮忙解释一下吗?
答案 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
位于,
之后。