来自不同表MySQL

时间:2015-05-07 18:14:55

标签: mysql database select join union

我有两个具有以下结构的表:

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

*以上两列都不是唯一的

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

* My_id t2

中是唯一的

我想做一个可以返回以下内容的单个查询

||ABUnique|| ||Info||

其中:

  • ABUnique 包含所有唯一的A1,A2,B1和B2
  • 信息是来自t2的通讯员信息,其中t1.My_id = t2.My_id

到目前为止,我能够使用此查询获取 ABUnique

(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 也纳入其中。

请注意,表格的条目数不同。

谢谢!

1 个答案:

答案 0 :(得分:0)

我不是100%肯定这会起作用(UNION查询有时会有点挑剔,而且我的大脑也不会因为记住每一个他们感到愤慨的地方而感到困扰。)

如果在每个UNIONed SELECT的结果中包含My_id,您应该可以将其结果加入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”联合,并在后续联接查询中使用临时表。