Mysql 如何将逻辑析取查询或SQL查询更改为合取查询并匹配列表中的所有输入参数?
我希望这个标题有点道理 我在DB里有三张桌子。第一个保存产品变量记录,第二个保存标签记录,第三个保存中间的表Mysql 如何将逻辑析取查询或SQL查询更改为合取查询并匹配列表中的所有输入参数?,mysql,sql,Mysql,Sql,我希望这个标题有点道理 我在DB里有三张桌子。第一个保存产品变量记录,第二个保存标签记录,第三个保存中间的表 产品变量:(id、productId、serviceProviderId) 标签:(id,标签) 产品变体标签参考:(标签标识,变体标识) 我的查询的输入参数是:productType、serviceProviderId和标签集和 我的目标是根据输入参数选择product\u variant表中的行 这是我在hibernate xml文件中的查询: SELECT v.* FROM
:(id、productId、serviceProviderId)产品变量
:(id,标签)标签
:(标签标识,变体标识)产品变体标签参考
productType
、serviceProviderId
和标签集和
我的目标是根据输入参数选择product\u variant
表中的行
这是我在hibernate xml文件中的查询:
SELECT v.*
FROM product_variant v
INNER JOIN product_variant_label_ref r ON v.id = r.variant_id
INNER JOIN product_product p ON p.productType = :productType
INNER JOIN product_label l ON l.id = r.label_id
WHERE v.product_id = p.id
AND v.serviceprovider_id = :serviceProviderId
AND l.label in (:labels)
问题是,使用操作符中的
,我得到了析取的或
选择,我希望和
介于两者之间。如果我指定不同的标签作为输入,我只需要那些通过ref table与所有标签相关的product\u variant
行。如果其中一个输入标签不属于任何产品变量
,则查询不应返回任何内容。有人能帮我改变我的疑问吗 您需要计算每个产品返回的行数,并将其与labels参数中的项目数相匹配
例如,如果在labels参数中有3个标签
SELECT v.id
FROM product_variant v
INNER JOIN product_variant_label_ref r ON v.id = r.variant_id
INNER JOIN product_product p ON p.productType = :productType
INNER JOIN product_label l ON l.id = r.label_id
WHERE v.product_id = p.id
AND v.serviceprovider_id = :serviceProviderId
AND l.label in (:labels)
GROUP BY v.id
HAVING COUNT(DISTINCT l.id) = 3 -- ie: Length of labels