从具有多个同名列的查询中扫描项目
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{}
是指向接口切片的指针,原因有两个:
据我所知 Columns
和 sql.Rows
的名字中没有限定符,所以我基本上得到了两个 Columns
他们的名字只有 active
,没有 table1
或 table2
。这意味着,当扫描到目标结构中时,table2.active
会覆盖 table1.active
。
我们还假设 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 错误将消失,但该列不会妨碍扫描仪!
我有一个查询像
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{}
是指向接口切片的指针,原因有两个:
据我所知
Columns
和sql.Rows
的名字中没有限定符,所以我基本上得到了两个Columns
他们的名字只有active
,没有table1
或table2
。这意味着,当扫描到目标结构中时,table2.active
会覆盖table1.active
。我们还假设
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 错误将消失,但该列不会妨碍扫描仪!