MYSQL和运算符在同一列中的比较

MYSQL和运算符在同一列中的比较,mysql,sql,Mysql,Sql,我正在尝试执行这个查询,有人能帮我解释一下为什么它不起作用 SELECT DISTINCT (p.fld_tag_id) FROM tbl_tag_properties as p WHERE 3 = (SELECT count(c.fld_tag_id) FROM tbl_tag_properties as c WHERE c.fld_tag_category_value_id in (67, 20, 48) and c.fld_tag_id = p.fld_tag_id) AND

我正在尝试执行这个查询,有人能帮我解释一下为什么它不起作用

SELECT DISTINCT (p.fld_tag_id) 
FROM tbl_tag_properties as p 
WHERE 3 = (SELECT count(c.fld_tag_id) 
FROM tbl_tag_properties as c 
WHERE c.fld_tag_category_value_id in (67, 20, 48) 
and c.fld_tag_id = p.fld_tag_id) 
AND p.fld_tag_category_value_id IN (55, 56) 
AND p.fld_tag_category_value_id IN (74, 75)

这个查询最终使用单AND运算符正确执行,但我需要多AND运算符

SELECT DISTINCT (p.fld_tag_id) 
FROM tbl_tag_properties as p 
WHERE 3 = (SELECT count(c.fld_tag_id) 
FROM tbl_tag_properties as c 
WHERE c.fld_tag_category_value_id in (67, 20, 48) 
and c.fld_tag_id = p.fld_tag_id) 
AND p.fld_tag_category_value_id IN (55, 56) 

如何将ID限制在一个范围内,然后再尝试将其限制在另一个范围内?;) 就像我想把颜色变成黑色和白色一样。不可能,除非您希望颜色为中的(黑色、白色)。另一种方式颜色=黑色
颜色=白色。。。。为了便于解释,我只举了颜色的例子

对于第一个查询,请尝试以下操作:

AND p.fld_tag_category_value_id IN (55, 56, 74, 75)
您在这里进行自连接,但这是什么意思?如果您可以简单地告诉我们,在给定表模式的情况下,您期望的输出是什么,那么情况会好得多

如果要限制为3返回的记录,请使用
limit
。请看一下以下样品,让我们知道您真正需要什么:很高兴理解并帮助您


您的两行
是互斥的:

AND p.fld_tag_category_value_id IN (55, 56) 
AND p.fld_tag_category_value_id IN (74, 75)
您的值不能同时位于
55,56
74,75

尝试:

使用或操作员:

SELECT DISTINCT (p.fld_tag_id) 
FROM tbl_tag_properties as p 
WHERE 3 = (SELECT count(c.fld_tag_id) 
FROM tbl_tag_properties as c 
WHERE c.fld_tag_category_value_id in (67, 20, 48) 
AND c.fld_tag_id = p.fld_tag_id) 
AND (p.fld_tag_category_value_id IN (55, 56)
    OR p.fld_tag_category_value_id IN (74, 75))

这样,您就可以按照您想要的方式构建查询。但不要忘记括号。

最后一个括号应该包含所有可能的值。 为了解释失败的原因,假设p.fld\u tag\u category\u value\u id=55
。 然后在您的查询中,首先

AND p.fld_tag_category_value_id IN (55, 56) // Will evaluate to TRUE
将为true,但second AND condition将为FALSE,因为单个值不能同时满足和条件

AND p.fld_tag_category_value_id IN (74, 75) // Will evaluate to FALSE
如果你试着跟随它,它会起作用

....
AND p.fld_tag_category_value_id IN (55, 56, 74, 75) 

如果查询同时以“AND”和“AND”执行,则每次都不会得到结果,除非两个列表之间存在重叠。在没有SQL解决方案的情况下,您总是可以提前计算列表的交集。我们有多个案例需要与AND运算符进行检查。。。。。。每个案例都有不同的ID。。。。。我们不能将所有ID与单个AND运算符一起使用。我们有多个情况需要与AND运算符一起检查。。。。。。每个案例都有不同的ID。。。。。我们不能将所有ID与单个和Operator@user1863272单个值不能同时满足和条件,您需要更改逻辑,请解释您正在检查的情况。我们有不同的数据表示类型,每个类型都有不同的ID要传递。我无法使用single AND运算符传递ID,因为结果出错。对于每个数据表示,必须有AND运算符。我们有多个案例,我们与AND运算符进行检查。。。。。。每个案例都有不同的ID。。。。。我们不能将所有ID与单个和运算符一起使用,否则您必须找到另一种方法。这行不通。我用另一种可能性编辑了我的答案,但它使用了OR运算符。
....
AND p.fld_tag_category_value_id IN (55, 56, 74, 75)