2015-06-02 13 views
0

Мне нужен запрос, чтобы найти счет на основе нескольких таблиц. Пожалуйста, проверьте приведенные ниже данные.Mysql разделил значения столбцов на основе таблицы соединения

У меня есть 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. Как объединить эти значения в один запрос. Пожалуйста, предложите несколько способов узнать значения счета.

+0

почему SQL-сервер и PHP помечены здесь? – ughai

+0

является 'profile_id' уникальным в' table_1'? – ughai

+0

@ughai. Да, profile_id уникален .. – satheesh

ответ

1

Если profile_id уникален в table_1 и у вас есть внешние ключи в table_2 и table_3, вы действительно не должны присоединиться обратно с table_1, что вы нужно что-то вроде этого.

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

Если вам действительно нужно присоединиться или нет ФКСА определенного, вы можете использовать этот

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 
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> 
Смежные вопросы