CustomerID cat_id ContactName Address City PostalCode Country
1 Alfreds 13 Maria Anders Obere Str Berlin 12209 Germany
4 Around 13,14 Thomas Hardy 120 Hanov London WA1 1DP UK
获取14个数据的查询是什么?我试过了
SELECT *
FROM `customers`
WHERE cat_id IN (13,14)
但失败了。
3条答案
按热度按时间7d7tgy0s1#
修正你的数据模型!为什么错了?
数值应存储在类型正确的列中,而不是字符串。
这些看起来像身份证。应该正确定义外键关系。
sql的字符串处理能力很差。
使用字符串操作的查询通常无法进行优化,从而优化索引、表统计信息和分区的使用。
sql有非常好的数据结构来存储列表。它叫table。
所以,你应该有一张每行一行的table
customer_id
以及cat_id
. 这通常称为“连接表”或“关联表”。也就是说,有时我们会被其他人的设计决策所困扰,真的,真的,真的很糟糕。如果是这样,你可以使用
find_in_set()
:xfb7svmp2#
这样的方法应该有用:
尽管你应该考虑让它正常化。
mzmfm0qo3#
你可以用
FIND_IN_SET
:注意:您不应该这样存储值!
您的表应该如下所示,以避免使用
FIND_IN_SET
:表
customers
:表
customers_cats
:表
cats
:因此,查询如下所示: