好吧,我在完成这项工作时遇到了一些麻烦,而且坦率地说,甚至不知道是否有可能做我想做的事。
我有以下表格结构: 表结构
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'
这为我提供了各行中列出的所有标签。这是最好的方法吗?有没有办法将它们全部集成到一个连续的结果中?
- 结束编辑 -
感谢任何帮助,谢谢。
答案 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;