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)