Mysql根据联接表拆分列值

Mysql根据联接表拆分列值,mysql,sql,join,case,Mysql,Sql,Join,Case,我需要一个查询来查找基于多表的计数。请检查以下详细信息 我有3个表,表1、表2、表3和表1是主表,其他2个是从主表继承的。这些表具有profile_id列的公共值。检查此示例查询计数器 SELECT COUNT(profile_id) from table_1 WHERE profile_id IN (SELECT profile_id FROM table_2) 上面的查询返回基于表_2 profile id的计数。但是我需要单独查询所有表,如下所示 SELECT COUNT(profi

我需要一个查询来查找基于多表的计数。请检查以下详细信息

我有3个表,表1、表2、表3和表1是主表,其他2个是从主表继承的。这些表具有profile_id列的公共值。检查此示例查询计数器

SELECT COUNT(profile_id) 
from table_1 
WHERE profile_id IN (SELECT profile_id FROM table_2)
上面的查询返回基于表_2 profile id的计数。但是我需要单独查询所有表,如下所示

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

在上面的查询中,表2计数基于表2配置文件,表3计数基于表3。如何将这些值合并到单个查询中。请建议一些方法来找出计数值。

您可以使用两个子查询来实现这一点:

 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>
如果profile_id在表_1中是唯一的,并且在表_2和表_3中有外键,那么实际上不需要与表_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

为什么在这里标记sql server和php?配置文件id在表1中是唯一的吗?@ughai。是,配置文件\u id是唯一的。。