我正在尝试从主表中获取满足子表条件的集合。我正在尝试的是:
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行。
答案 0 :(得分:4)
您可以按照main_table
的PK对记录进行分组,然后相应地过滤相应的组:
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)
的唯一性,则可以使用DISTINCT
来避免代价高昂的COUNT(*) = 2
操作。
答案 1 :(得分:0)
或者你想要的是......这里的'和'条件永远不会是真的
category_available.category_id = 206 AND category_available.category_id = 207
此语句可以减少到206 = 207,这是永远不会返回的结果。一个字段如何同时等于206和207?
编辑:
这可能更接近你正在寻找的东西...有几种方法可以写这个,如果它是一次运行的脚本,我会用计数来接近它:
eggyal打败了我......我的剧本是他几分钟前发布的一面镜子。