Mysql根据连接表拆分列值

时间:2015-06-02 04:59:26

标签: mysql sql join case

我需要一个查询来根据多个表查找计数。请查看以下详细信息

我有3个表作为table_1,table_2,table_3和table_1是主表,其他2个是从主表继承的。这些表具有profile_id列的共同值。检查此示例查询计数器

SELECT COUNT(profile_id) 
from table_1 
WHERE profile_id IN (SELECT profile_id FROM table_2)

上述查询根据table_2 profile id返回计数。但我需要单独查询所有表格,如下所示

SELECT COUNT(profile_id) as table_2count, 
       COUNT(profile_id) as table_3count 
FROM table_1 WHERE (the two condition) 

在上面的查询中,table_2count基于table_2配置文件,table_3count将基于table_3。如何将这些值合并到单个查询中。请提供一些方法来查找计数值。

2 个答案:

答案 0 :(得分:1)

您可以使用2个子查询来实现:

 SELECT
      t1.*,   -- get all data from t1 + two counts from t2 and t3
      (SELECT COUNT(t2.profile_id) 
       FROM table_2 t2 
       WHERE t2.profile_id = t1.profile_id) as count2,
      (SELECT COUNT(t3.profile_id) 
       FROM table_3 t3 
       WHERE t3.profile_id = t1.profile_id) as count3
    FROM table_1 t1
    WHERE <your conditions for table_1 go here>

答案 1 :(得分:1)

如果profile_id中的table_1是唯一的,并且您在table_2table_3中有外键,那么您实际上不需要与table_1联系,您需要什么是这样的。

SELECT 
(SELECT COUNT(distinct profile_id) FROM table_2) table_2count,
(SELECT COUNT(distinct profile_id) FROM table_3) table_3count

如果您确实需要加入或没有定义FK,可以使用此

SELECT
    COUNT(distinct t2.profile_id) table_2count,
    COUNT(distinct t3.profile_id) table_3count
FROM table_1 t1
    LEFT JOIN table_2 t2 on t1.profile_id = t2.profile_id
    LEFT JOIN table_3 t3 on t1.profile_id = t3.profile_id