Mysql 如何在SQL中使用IN运算符with和运算符IN WHERE子句。。。?
我在我的CodeIgniter模型中使用这个数据库查询Mysql 如何在SQL中使用IN运算符with和运算符IN WHERE子句。。。?,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我在我的CodeIgniter模型中使用这个数据库查询 SELECT p.product_id, p.product_name, p.product_photo, p.size, p.price, p.status, p.product_image_path
SELECT
p.product_id,
p.product_name,
p.product_photo,
p.size,
p.price,
p.status,
p.product_image_path
FROM
products AS p
LEFT JOIN
product_category AS pc
ON
p.product_id = pc.product_id
LEFT JOIN
vendor_products AS vp
ON
vp.product_id = pc.product_id
WHERE
pc.category_id = 2
AND
vp.vendor_id = 36
AND
pc.subcategory_id IN (1,2)
AND
pc.subcategory_value_id IN (1,4)
它还给了我:
我只想要那些满足sub_category_value_id所有条件的产品。现在它返回所有条件
我是数据库新手,对查询不太了解。似乎您不应该使用左连接到
产品类别
表。LEFT JOIN关键字返回左表中的所有记录(product\u category
),请按如下方式尝试:
SELECT
p.product_id,
p.product_name,
p.product_photo,
p.size,
p.price,
p.status,
p.product_image_path
FROM
products AS p
INNER JOIN
product_category AS pc
ON
p.product_id = pc.product_id
LEFT JOIN
vendor_products AS vp
ON
vp.product_id = pc.product_id
WHERE
pc.category_id = 2
AND
vp.vendor_id = 36
AND
pc.subcategory_id IN (1,2)
AND
pc.subcategory_value_id IN (1,4)
您希望
按
分组,并且拥有
。有点不清楚“所有条件”是什么意思,但看起来是这样的:
SELECT p.*
FROM products p JOIN
product_category pc
ON p.product_id = pc.product_id JOIN
vendor_products AS vp
ON vp.product_id = pc.product_id
WHERE pc.category_id = 2 AND
vp.vendor_id = 36 AND
(pc.subcategory_id, pc.subcategory_value_id) IN ( (1, 1), (2, 4) )
GROUP BY p.product_id -- this is okay because it is presumably the primary key
HAVING COUNT(DISTINCT pc.subcategory_id) = 2;
注:
子句将WHERE
转换为左连接
,因此使用右内部连接
连接
- 我假设您需要子类别表中的成对值
- HAVING子句坚持两个子类别匹配
SELECT
DISTINCT p.product_id,
p.product_name
FROM products AS p
LEFT JOIN product_category AS pc ON p.product_id = pc.product_id
LEFT JOIN vendor_products AS vp ON p.product_id = vp.product_id
LEFT JOIN subcategories AS sc ON sc.subcategory_id = pc.subcategory_id
LEFT JOIN subcategories_value AS scv ON scv.subcategory_value_id = pc.subcategory_value_id
WHERE vp.vendor_id = 2
AND vp.category_id = 2
AND pc.subcategory_id IN (1, 2)
AND scv.subcategory_value_id IN (1, 4)
ORDER BY p.product_id;
where子句看起来没有问题,重复可能是由连接引起的。试着一次扔掉一个来测试。@OwlsSleeping其实这就是问题所在。我不知道怎么做。你提到了你得到的关系输出。什么是你期望得到的,而你不是?你唯一的问题是你看到的副本吗?@KyleWilliamson对不起,我发错问题了。我会更新它。你能检查一下吗?你能再解释一下你的问题吗?我不明白这个问题。您对类别和子类别的筛选不起作用?不是相反吗?LEFT JOIN返回所有产品,即使没有匹配的类别。HAVING COUNT(DISTINCT pc.subcategory_id)=2。。。。你能给我解释一下这句话吗。。。。??整个查询用于数据库,但我想将其添加为PHP查询以动态获取数据。@AkashRaut。它正在计算匹配子类别的数量并确保两者都匹配。很抱歉再次询问,但我应该为{pc.subcategory_id)=2}中的“2”声明什么。子类别\u id和子类别\u值\u id每次都会更改,即它可以是单个值,也可以是多个值,就像我们之前在查询中看到的那样。拥有COUNT没有返回所需的输出。@AkashRaut听起来不错。。快乐编码!