虽然可以在逗号分隔的列表上搜索匹配项(例如使用 FIND_IN_SET),但读取代码很讨厌,效率低下,会妨碍引用完整性,并且通常是一个非常糟糕的主意(尽管不如存储 php php 字段中的序列化数组)。
至少创建一个额外的描述表,每个公司的每个描述都有 1 行。
可能更好的是有一个可能的描述表,然后是一个链接表,每个公司有很多行,每个描述一个。链接表行只包含公司的唯一 ID 和描述的唯一 ID。
例如,简单的表
公司表
公司编号
公司名称
产品表
产品编号
产品描述
公司产品链接
公司编号
产品编号
然后找到所有销售' IC芯片'或'音响系统'的公司:-
SELECT a.CompanyId, a.CompanyName, COUNT(c.ProductId)
FROM Company a
INNER JOIN CompanyProductLink b ON a.CompanyId = b.CompanyId
INNER JOIN ProductTable c ON b.ProductId = c.ProductId AND c.ProductDescription IN ('IC chips','sound system')
GROUP BY a.CompanyId, a.CompanyName
如果您想要只销售一种“ IC 芯片”或“音响系统”的公司:-
SELECT a.CompanyId, a.CompanyName, COUNT(c.ProductId) AS ProductCount
FROM Company a
LEFT OUTER JOIN CompanyProductLink b ON a.CompanyId = b.CompanyId
LEFT OUTER JOIN ProductTable c ON b.ProductId = c.ProductId AND c.ProductDescription IN ('IC chips','sound system')
GROUP BY a.CompanyId, a.CompanyName
HAVING ProductCount = 1