SQL反向查询产品关联折扣:获取ID为2的产品适用折扣
搞定单个产品的对应折扣查询
嘿,我来帮你解决这个问题!要获取ID为2的产品适用的折扣,核心是把products和discounts两张表关联起来,通过模糊匹配找到符合条件的折扣项。这里给你两种实用的实现方式:
方式一:JOIN关联查询(推荐)
这是最常用的写法,用LEFT JOIN可以同时覆盖“有折扣”和“无折扣”的场景:
SELECT p.ID AS 产品ID, p.Name AS 产品名称, d.Name AS 折扣名称, d.Percentage AS 折扣率 FROM Products p LEFT JOIN Discounts d ON p.Name LIKE CONCAT('%', d.`Product Name Search Param`, '%') WHERE p.ID = 2;
小细节说明:
CONCAT('%', d.Product Name Search Param, '%')是为了动态拼接模糊匹配的通配符,自动适配折扣表里的搜索参数- 如果这个产品没有匹配到任何折扣,
折扣名称和折扣率会显示NULL,一眼就能看出来有没有折扣 - 要是你只关心有折扣的结果,把
LEFT JOIN换成INNER JOIN就行
方式二:子查询写法
如果你更喜欢子查询的风格,也可以这么写:
SELECT Name AS 折扣名称, Percentage AS 折扣率 FROM Discounts WHERE EXISTS ( SELECT 1 FROM Products WHERE ID = 2 AND Name LIKE CONCAT('%', `Product Name Search Param`, '%') );
说明:
- 这个查询会直接返回ID为2的产品所有符合条件的折扣(要是有多个匹配的话也能全列出来)
- 要是没有适用折扣,结果集就是空的
针对你的现有数据,ID为2的产品是Hat,名称里既不含a也不含b,所以不管用哪种写法,都会返回空结果(或者LEFT JOIN版本返回NULL),这完全符合你设定的规则哦。
内容的提问来源于stack exchange,提问作者Bálint Bakos
相关产品推荐
相关产品推荐

