mysql从多个表查询

时间:2015-12-10 15:12:58

标签: mysql sql

好吧,我在完成这项工作时遇到了一些麻烦,而且坦率地说,甚至不知道是否有可能做我想做的事。

我有以下表格结构: 表结构

Tags (t)
============
ID
LINE_ID
TAG
ACTIVE

Dashboard Lines (dl)
===============
ID
LINE_ID
GAUGE_TAG_ID
DISPLAY_NAME
ACTIVE

Dashboard Points (dp)
================
ID
DASHBOARD_ID
TAG_ID
DISPLAY_NAME

我要做的是根据t.TAG表中的所有ID将所有'Dashboard Points'拉入单个结果中。唯一的例外是GAUGE_TAG_ID in the Dashboard_Lines table。我也需要拉那个标签。我已成功将所有t.TAG拉入dp.TAG_ID = t.ID加入的单个结果中。很抱歉,我还没有想出如何加入dl.gauge_tag_id以获取与ID相关联的相关t.tag

我当前的查询(未拉动gauge_tag_id)

SELECT GROUP_CONCAT(DISTINCT t.TAG), dl.gauge_tag_id, dl.line_id
FROM tags t
JOIN dashboard_lines dl ON dl.line_id = t.line_id
JOIN dashboard_points dp ON dp.tag_id = t.id AND dp.dashboard_id = dl.id
WHERE t.line_id = '1'                                                       
AND t.active = 'Y'

这成功地将所有t.TAG与关联ID on t.ID and dl.TAG_ID

组合在一起

是否也可以包含t.TAG for the dl.GAUGE_TAG_ID

编辑: http://sqlfiddle.com/#!9/ace98d

编辑2: 期望的结果:

GROUP_CONCAT(t.TAG)
Line1_Over_Cnt, Line1_Case_Count, Line1_MaxCap.. 

(所有相关的tag_ids以及gauge_tag_id - 显示为t.TAG)

这不必全部在一列(GROUP_CONCAT)中。它可以是包含所有t.TAG的传统结果集,只要它包含所有这些(t.ID上的dp.TAG_ID)和(t.ID上的dl.GAUGE_TAG_ID)

TAG
Line1_Over_Cnt
Line1_Case_Count
Line1_MaxCap
Line1_Idle
Kleins_Line1_Reset
L1_STD_Rate
Line1_Rate_Temp
Line1_Rate

Edit3:可能的解决方案

SELECT t1.tag
FROM tags t1
JOIN dashboard_lines dl ON dl.line_id = t1.line_id
JOIN dashboard_points dp ON dp.tag_id = t1.id AND dp.dashboard_id = dl.id
WHERE t1.line_id = '1'                                                       
AND t1.active = 'Y'
UNION
SELECT t2.tag
FROM tags t2
JOIN dashboard_lines dl ON gauge_tag_id = t2.id AND dl.line_id = '1'
WHERE t2.line_id = '1'                                                       
AND t2.active = 'Y'

这为我提供了各行中列出的所有标签。这是最好的方法吗?有没有办法将它们全部集成到一个连续的结果中?

- 结束编辑 -

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

在Edit3之后,你几乎就在那里。将所有内容封装在另一个可以为您进行组连接的选项中。

SELECT GROUP_CONCAT(tags) FROM 
(
  SELECT t1.tag as tags
  FROM tags t1
  JOIN dashboard_lines dl ON dl.line_id = t1.line_id
  JOIN dashboard_points dp ON dp.tag_id = t1.id AND dp.dashboard_id = dl.id
  WHERE t1.line_id = '1'                                                       
  AND t1.active = 'Y'
  UNION
  SELECT t2.tag as tags
  FROM tags t2
  JOIN dashboard_lines dl ON gauge_tag_id = t2.id AND dl.line_id = '1'
  WHERE t2.line_id = '1'                                                       
  AND t2.active = 'Y'
) A;