从具有多个同名列的查询中扫描项目

Scan items from a query with multiple columns of the same name

我有一个查询像

myQuery := "SELECT DISTINCT table1.id, table1.active, table2.active FROM table1 INNER JOIN table 2 ON table1.id = table2.foreign_id AND table2.active = true

我正在与 MySQL 合作。

我必须 select table2.active 以避免 SELECT list; this is incompatible with DISTINCT in my sql 错误。

我正在使用 sqlx,但我认为问题更深层次。我无法将结果扫描到 err := conn.Unsafe().Select(dest, myQuery) 的目标对象中,dest 类型 interface{} 是指向接口切片的指针,原因有两个:

  1. 据我所知 Columnssql.Rows 的名字中没有限定符,所以我基本上得到了两个 Columns他们的名字只有 active,没有 table1table2。这意味着,当扫描到目标结构中时,table2.active 会覆盖 table1.active

  2. 我们还假设 table1.active 有另一种类型而不是 table2.active(这在这个简单的例子中没有多大意义,但在我的真实场景中确实如此)。我会得到一个错误,因为 table2.active 值将有错误的类型被扫描到我的目标对象中。

由于我不知道 dest 中结构的性质,因此直接检查 Rows 并没有多大帮助,因为感觉不可能将这些值写入 [=15] =] 手动构造。我可以通过一些反射获取目标结构的所有字段名称,并将它们放入查询的 SELECT 部分(这就是我实际上正在做的),但实际上不是相反。

我也想知道我是否可以在子查询之上进行查询,将其包装到没有所有误导列的外部查询中。但是像 SELECT id, active FROM table1 WHERE id IN ([query above]) 这样的查询也不适用于返回的所有其他列。 也许我可以手动收集 ID 并 运行 第二次查询,但这可能相当无效。

草莓刚刚在评论中给出了解决方案: Even columns required in the SELECT clause to prevent the SELECT list; this is incompatible with DISTINCT in my sql error error can be aliased.所以基本上

SELECT DISTINCT table1.id, table1.active, table2.active as active2 FROM table1 INNER JOIN table 2 ON table1.id = table2.foreign_id AND table2.active = true

有效 - MySQL 错误将消失,但该列不会妨碍扫描仪!