如何在 mySQL 查询中显示额外的列
Posted
技术标签:
【中文标题】如何在 mySQL 查询中显示额外的列【英文标题】:How to display an extra colum in my SQL query 【发布时间】:2021-08-13 14:25:01 【问题描述】:我有一个名为 treeview 的表,其中包含 id、name、assettype 和 parent。
我有另一个名为 events 的表,其中包含 id 和 treeid。
一个treeview实例可以有事件,然后treeview.id = events.treeid。
我进行了查询以显示所有事件并显示树 ID、传感器名称和父级。 但我也想显示机器名称。
问题是我的“机器”名称和“传感器”名称在同一列,但机器名称的资产类型 = 2,传感器名称的资产类型 = 3 或 4。
例如,在第一行中,“Motor NDE Vertical”(传感器)的父级“1191”是“Sidewinch PS”(机器),但它没有显示出来。
我想我需要在某个地方实现“WHERE assetstype = ...”,但我找不到在哪里。
谁能帮我解决这个问题?
这是我的查询:
SELECT DISTINCT(e.treeid), t.name as "sensor", t.parent, (SELECT name FROM treeview WHERE parent = id) as "machine"
FROM events e, treeview t
WHERE e.treeid = t.id
ORDER BY treeid
这是我的结果是 Grafana:
【问题讨论】:
样本数据和期望的结果会有很大帮助。 请注意,DISTINCT 不是函数。 【参考方案1】:你可能想要这样的东西
SELECT DISTINCT e.treeid, t.name as "sensor", t.parent, p.name as "machine"
FROM events e
INNER JOIN treeview t ON e.treeid = t.id AND t.assettype IN (3, 4)
INNER JOIN treeview p ON p.id=t.parent AND p.assettype=2
ORDER BY e.treeid
诀窍是加入 2 次 treeview
表并在 ON
子句中指定它们的 assettype
:
-
获取传感器
获取作为这些传感器父母的机器
我对您问题中的信息非常准确
【讨论】:
这行得通。非常感谢!我在之前的查询中添加了WHERE e.treeid = t.id
。
@Thethiefer [上限] 欢迎您。 [大写]
理论上你不需要那个 WHERE,它在 ON 子句中以上是关于如何在 mySQL 查询中显示额外的列的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL:如何在 mysql 中将整行从一个表复制到另一个表,而第二个表有一个额外的列?
MYSQL SELECT:如何获取一个额外的列,指示是不是满足 WHERE 子句中的第一个或第二个条件?