MySQL AND vs OR条件

时间:2013-10-29 22:47:50

标签: mysql sql join conditional-statements

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

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行。

2 个答案:

答案 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打败了我......我的剧本是他几分钟前发布的一面镜子。