0

我正在尝试执行此查询,任何人都可以帮助它为什么不起作用。

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) 
4

3 回答 3

4

如何将 ID 限制在一个范围内,然后再尝试将它们限制在另一个范围内?;) 就像我想把颜色变成黑色一样and。除非您希望颜色为in(黑色,白色),否则这是不可能的。另一种方式 color = BLACK orcolor = WHITE.... 我只是以颜色为例,以方便解释。

试试这个第一个查询:

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

你在这里做一个自我加入,但这有什么WHERE 3 =用呢?如果您可以简单地告诉您在给定表模式的情况下您期望的输出,那会好得多。

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

* SQLFIDDLE

于 2012-12-03T13:18:34.753 回答
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))

这样您就可以按照自己的方式构建查询。不过不要忘记括号。

于 2012-12-03T13:19:14.000 回答
1

您的最后一个 AND 应该包含所有可能的值。为了解释它失败的原因,假设p.fld_tag_category_value_id = 55. 然后在您的查询中首先 AND 即

AND p.fld_tag_category_value_id IN (55, 56) // Will evaluate to 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) 
于 2012-12-03T13:19:44.730 回答