如何在 mySQL 查询中显示额外的列

Posted

技术标签:

【中文标题】如何在 mySQL 查询中显示额外的列【英文标题】:How to display an extra colum in my SQL query 【发布时间】:2021-08-13 14:25:01 【问题描述】:

我有一个名为 treeview 的表,其中包含 id、name、assettypeparent

我有另一个名为 events 的表,其中包含 idtreeid

一个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 查询中显示额外的列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用额外的列执行“插入到 select *”查询?

MYSQL:如何在 mysql 中将整行从一个表复制到另一个表,而第二个表有一个额外的列?

MYSQL SELECT:如何获取一个额外的列,指示是不是满足 WHERE 子句中的第一个或第二个条件?

优化 MySQL 查询

如何使用两个不同的列 mySQL 从查询而不是其他查询中获取数据? [复制]

Spring boot JPA - 使用额外的列查询多对多