2015-05-07 3 views
1

У меня две таблицы со следующей структурой:Несколько SELECTS из разных таблиц MySQL

Table t1 
||My_id|| ||A1|| ||A2|| ||B1|| ||B2|| 

* ни одна из указанных столбцов являются уникальными

Table t2 
||My_id|| ||Info|| 

* my_id является уникальным в t2

Я хотел бы сделать одного запроса, который может вернуть следующее:

||ABUnique|| ||Info|| 

Где:

  • ABUnique содержит все уникальное A1, A2, B1 и B2
  • информация является корреспондентом Info от t2, где t1 .My_id = t2.My_id

До сих пор мне удалось получить ABUniq у.е мой используя этот запрос:

(SELECT DISTINCT `A1` AS `ABUnique` FROM `t1`) 
UNION (SELECT `A2` FROM `t1`) 
UNION (SELECT `B1` FROM `t1`) 
UNION (SELECT `B2` FROM `t1`) 
ORDER BY `ABUnique` 

Но не знаю, как я мог получить Info в этом, а также.

Обратите внимание: таблицы имеют различное количество записей.

Спасибо!

+0

Вам нужно ['JOIN'] (https://dev.mysql.com/doc/refman/5.0/en/join.html) таблицы в' My_id', вам не нужно 'UNION'. –

+0

@MickMnemonic Не могли бы вы уточнить, пожалуйста? –

ответ

0

Я не на 100% уверен, что это сработает (запросы UNION могут быть немного заурядными порой, и мой мозг не может быть обеспокоен, чтобы помнить каждое место, которое они возмущаются).

Если включить My_id в результатах каждого UNIONed SELECT, вы должны быть в состоянии объединить свои результаты t2 с ним:

SELECT abSubQ.`ABUnique`, t2.Info 
FROM 
((SELECT DISTINCT `A1` AS `ABUnique`, My_id FROM `t1`) 
UNION (SELECT `A2`, My_id FROM `t1`) 
UNION (SELECT `B1`, My_id FROM `t1`) 
UNION (SELECT `B2`, My_id FROM `t1`) 
) AS abSubQ 
INNER JOIN t2 USING (My_id) 
ORDER BY `ABUnique` 
; 

Если это не работает, вы должны быть в состоянии создать и используйте временную таблицу для «INSERT INTO tmp_blahblah ... SELECT» объединение в одном запросе и используйте временную таблицу в следующем запросе соединения.

+0

Немного изменил запрос, чтобы он работал, но результат не тот, который я ожидал - количество возвращенных строк намного меньше, чем число, которое я получаю для запроса ABUnique. Поэтому я думаю, что INNER JOIN работает не так, как предполагалось. –

+0

Я бы предположил, что это означает, что не все значения 'My_id', найденные в' t1', также находятся в 't2'. Если это так, вы должны иметь возможность изменить 'INNER JOIN' на' LEFT JOIN'; он даст вам все результаты UNIONed и 'Info', если они есть. – Uueerdo

+0

Или это может быть потому, что, как первоначально было опубликовано, мой ответ не имел ничего общего с вещами, как это могло бы быть. – Uueerdo

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