2013-11-26 3 views
1

У меня есть три таблицы, все из которых имеют общее поле (our_id).MySQL: Получите результаты из двух таблиц, подсчитайте совпадения в третьем

our_id является основным ключом в Таблице 1.

our_id также существует ноль или более раз в Таблицах 2 и Таблице 3.

Я хочу, чтобы выбрать записи, где our_id существует в обоих Table1 и Table2, но мне также нужно подсчитать, сколько раз our_id происходит в Table3 (или даже просто ли our_id существует или нет в Table3).

Я пришел с этим:

SELECT Table1.*, Table2.*, COUNT(Table3.*) AS table3_count 
FROM Table1, Table2, Table3 
WHERE Table1.our_id = Table2.our_id 
AND Table1.our_id = Table3.our_id; 

... но что только возвращает результаты, где our_id существует в Table3, что он не может сделать.

Так что я пробовал:

SELECT Table1.*, Table2.*, COUNT(Table3.*) AS table3_count 
FROM Table1, Table2, Table3 
WHERE Table1.our_id = Table2.our_id 
    AND (Table1.our_id = Table3.our_id 
     OR NOT EXISTS (SELECT * FROM Table3 
         WHERE Table1.our_id=Table3.our_id)); 

Но это просто бежал и бежал ...

Мне это нужно еще возвращать результаты, где our_id существует как Table1 и Table2, и скажите мне, сколько раз (или существует ли она в таблице 3.

Спасибо заранее!

ответ

2

Вы должны использовать ЛЕВЫЙ ПРИСОЕДИНЯЙТЕСЬ, чтобы привести таблицу 3. LEFT JOIN возвращает все строки из левой таблицы (Таблица 1) и пытается сопоставить строки в правой таблице (Таблица 3). Если в таблице 3 нет строк, которые соответствуют, NULL возвращается для выбранных полей Table3.

SELECT Table1.*, Table2.*, t3.count 
FROM Table1, Table2 
LEFT JOIN (SELECT our_id, COUNT(*) AS count FROM Table3 GROUP BY our_id) t3 
ON Table1.our_id = t3.our_id 
WHERE Table1.our_id = Table2.our_id 
+0

Это похоже на правильную вещь! Я только что попробовал, и я получаю сообщение об ошибке: '# 1054 - Неизвестный столбец 'Table1.our_id' в 'on clause'', но эта таблица и поле определенно существуют (я проверял орфографию дюжину раз Теперь!). – JoLoCo

+0

Правильно ли это дело? Возможно, вы захотите попробовать все псевдонимы таблиц, чтобы исправить эту проблему. 'FROM Table1 t1, Table2 t2', а затем используйте' ON t1.our_id = t3.our_id'. Я понятия не имею, что может быть неправильно, но, возможно, одна из этих двух вещей поможет вам. –

+0

А, я понял! Мне пришлось обмениваться таблицами 1 и 2 в строке 'FROM' (так что вторая строка читает' FROM Table2, Table1'). Большое спасибо за вашу помощь, я очень ценю это. – JoLoCo

Смежные вопросы