0

我正在尝试从满足子表条件的主表中获取集合。我正在尝试的是:

SELECT main_table.* 
FROM main_table 
LEFT OUTER JOIN category_available ON main_table.id = category_available.main_table_id 
WHERE  category_available.category_id = 206 AND category_available.category_id = 207;

即使主表中包含满足子表中 AND 条件的条目的行,我也没有得到任何结果。如果我用 AND 代替 OR,我会得到预期的结果,但查询需要满足 AND 条件。

category_available 是一个子表。它包含许多可以绑定到单个主表行的行。所以它可能包含两行包含 main_table id,一个 id 为 206,另一行 207。所以我需要返回满足这两个条件的 main_table 行。

4

2 回答 2

4

您可以按您的 PK 对记录进行分组main_table,然后相应地过滤相应的组:

SELECT   m.* 
FROM     main_table m JOIN category_available c ON c.main_table_id = m.id
WHERE    c.category_id IN (206, 207)
GROUP BY m.id
HAVING   COUNT(DISTINCT c.category_id) = 2

如果该category_available表保证 的唯一性,则可以通过使用来(main_table_id, category_id)避免代价高昂的操作。DISTINCTCOUNT(*) = 2

于 2013-10-29T22:57:19.763 回答
0

或者是你想要的......这里的“和”条件永远不会是真的

category_available.category_id = 206 AND category_available.category_id = 207

这条语句可以简化为 where 206 = 207,它永远不会为真,永远不会返回结果。一个字段怎么可能同时等于 206 和 207?

编辑:

这可能更接近您正在寻找的内容......有几种编写方式,如果它是一次性运行的脚本,我会用计数来接近它:

Eggyal 打败了我……我的剧本是他几分钟前发布的内容的一面镜子。

于 2013-10-29T22:51:20.533 回答