2010-11-11 53 views
1

有一个称为表1的假想表,用列:MySQL的 - 指望不同的条件不同的领域中一个连接表

  • ID
  • 条件1
  • 条件2
  • joinable_key

还有一个Main_Table,其ID与第一个中的joinable_key相对应。

我想以这样一种方式加入他们,我可以根据条件1和条件2分别计算Table1的行数 - 也就是说,我希望能够执行“count(Table1.condition1)作为first_condition,在select查询上计数(Table1.condtion2)作为second_condition“。

查询大概会是这个样子:

SELECT Main_Table.some_column, COUNT(Table1.condition1) AS first_condition, COUNT(Table1.condtion2) AS second_condition 
FROM Main_Table 
LEFT JOIN Table1 AS T1 on (T1.joinable_key = Main_Table.id AND T1.condition1 = 'something') 
LEFT JOIN Table1 AS T2 on (T2.joinable_key = Main_Table.id AND T2.condition2 = 'something else') 
GROUP BY (Main_Table.id) 

当此执行,但是,这两个计数结果是相等的,并且相互实际上繁殖。 必须将所有结果包含在最终输出中 - 包括那些没有Table1中任何条目的结果 - 也就是说,如果Table1中没有行,并且joinable_key等于Main_Table.id,那么它也需要包含在内。

在任何人建议实际做两个单独的查询并通过PHP处理它之前 - 我知道为什么以及如何完成它,但我的目标是确定这个多重计数是否可以在一个中完成查询。

谢谢

+0

[在一个查询在MySQL计数多行(http://stackoverflow.com/questions/2957269/counting-multiple-rows-in-mysql-in-one-query) – Konerak 2010-11-11 10:57:14

回答

4
SELECT some_column, 
     (SELECT COUNT(1) 
      FROM Table1 
     WHERE mt.id = joinable_key 
      AND condition1 = 'something' 
     ) AS first_condition, 
     (SELECT COUNT(1) 
      FROM Table1 
     WHERE mt.id = joinable_key 
      AND condition2 = 'something else' 
     ) AS second_condition 
    FROM MainTable mt 
+0

这个子查询解决方案是正确的,谢谢! – Swader 2011-04-23 16:34:23

0
SELECT Main_Table.some_column, 
     SUM(t1.condition1 = 'something') AS first_condition, 
     SUM(t1.condition2 = 'something_else') AS second_condition 
FROM Main_Table 
LEFT JOIN 
     Table1 AS t1 
ON  t1.joinable_key = Main_Table.id 
     AND 
     (
     t1.condition1 = 'something' 
     OR 
     t1.condition2 = 'something else' 
     ) 
GROUP BY 
     Main_Table.id 

如果同时condition1condition2是有选择性的,这句法可能更有效:

SELECT Main_Table.some_column, 
     (
     SELECT COUNT(*) 
     FROM table1 t1 
     WHERE t1.joinable_key = main_table.id 
       AND t1.condition1 = 'something' 
     ), 
     (
     SELECT COUNT(*) 
     FROM table1 t1 
     WHERE t1.joinable_key = main_table.id 
       AND t1.condition2 = 'something_else' 
     ) 
FROM Main_Table 

你应该创建以下指标:

table1 (id, condition1) 
table1 (id, condition2) 

为这个工作很快。

+0

我的可能重复对没有及时回复表示歉意。我会尽我所能,尽快对此进行正确测试。 – Swader 2010-11-13 16:01:15

相关问题