Выберите два значения из двух разных таблиц

#mysql

Вопрос:

У меня есть два стола, они выглядят так:

 Table 1
==========================
id_tab1 | worker | number
==========================
1       | Adam   | 123123
 
 Table 2
==========================
id_tab2 | worker | number
==========================
1       | Adam   | 123456
 

У них обоих нет ничего общего. Иногда worker может быть в обоих из них, и я хочу сосчитать каждую строку из обеих таблиц и показать их, как:

 ===============================================
worker | count_numbers_tab1 | count_numbers_tab2
===============================================
Adam   |           1        |         1
 

Я пробовал, INNER JOIN но он показывает странные цифры.

ПРАВКА 1: Как и в случае с ответом Абхилеха, я получил следующий запрос(реальный пример):

 SELECT druga_klasa.pracownik, COUNT(druga_klasa.numer_zlecenia), COUNT(zlewy_zlomy.numer_zlecenia) FROM druga_klasa
FULL JOIN zlewy_zlomy on druga_klasa.pracownik=zlewy_zlomy.pracownik 
GROUP BY pracownik;
 

и вот как выглядят настоящие столы

введите описание изображения здесь
введите описание изображения здесь

и у меня есть ошибка, говорящая

 Unknown column druga_klasa.pracownik in field list.
 

Комментарии:

1. Какие «странные цифры» он показывает? Какой запрос вы пытались задать? Вам, наверное, просто нужно GROUP BY или что-то в этом роде.

2. Если у них «нет ничего общего», то чего вы JOIN от них ожидаете? Может быть, вам нужно LEFT JOIN вместо этого?

3. Я пробовал что-то подобное SELECT COUNT(tab2.numbers), COUNT(tab1.numbers), worker FROM tab1 LEFT JOIN tab2 ON tab1.worker= tab2.worker GROUP BY worker

4. И какие результаты это дает? Этот запрос, очевидно, работает со строками, которые вы показали. Можете ли вы добавить другие примеры строк, в которых ваш запрос не работает?

5. @RocketHazmat это не работало, ошибка была «Работник столбца в списке полей неоднозначен»

Ответ №1:

Что вы имеете в виду, говоря, что у них обоих нет ничего общего?

 SELECT table1.worker, COUNT(table1.number), COUNT(table2.number) FROM table1
INNER JOIN table 2 on table1.worker=table2.worker
GROUP BY worker;
 

Но это будет работать только в том случае, если работник столбца является общим для обоих.

Комментарии:

1. Что, если они не являются обычными? Могу я показать 0 или что-то в этом роде?

2. Что не является общим для значений или самого столбца?

3. Значения рабочего столбца. Например, если у рабочего Адама есть 1 строка в таблице 1, и он не отображается на вкладке 2, я хотел бы показать 0 или нуль или что-то еще в столбце count_tab2

4. Используйте полное соединение для этого, замените внутреннее на полное. Это должно дать вам правильный результат. Везде, где нет значения, оно будет отображаться как null.

5. Я отредактировал вопрос, пожалуйста, проверьте его