我正在尝试执行此查询,任何人都可以帮助它为什么不起作用。
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)
while ....
此查询在最后使用单个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)
答案 0 :(得分:4)
如何将ID限制在一个范围内,然后再尝试将其限制为另一个范围? ;)
这就像我想要着色为黑色and
白色。除非您希望颜色为in
(黑色,白色),否则不可能。另一种方式color = BLACK or
color = WHITE ....我只是举了颜色的例子以便于解释。
首先尝试这个问题:
AND p.fld_tag_category_value_id IN (55, 56, 74, 75)
你正在这里进行自我加入,但WHERE 3 =
对此有何看法?如果您可以简单地告诉您对表格架构的期望输出,那会更好。
如果要限制为3返回的记录,请使用LIMIT
。请查看以下示例,并告诉我们确实需要什么。 :)很高兴了解并帮助你。
答案 1 :(得分:2)
您的两条AND
行互相排斥:
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, 74, 75)
使用OR运算符:
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))
这样您就可以按照自己的方式构建查询。不要忘记括号。
答案 2 :(得分:1)
你的最后一个AND应该包含所有可能的值。
为了解释它失败的原因,假设为p.fld_tag_category_value_id = 55
。
然后在您的查询中首先AND即
AND p.fld_tag_category_value_id IN (55, 56) // Will evaluate to TRUE
将为true,但第二个AND条件为FALSE,因为单个值不能同时满足您的AND条件。
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)