我有很多使用id
作为主键的表。当我将几个表和select *
连接在一起时,只显示一个id列。使用MySql时,解决此问题的唯一方法是使用SELECT AS
,例如SELECT id AS groupId
。
MariaDB的情况仍然如此吗?我的重复列名不仅限于id字段,因此我最终会得到非常详细的select语句。
我希望MariaDB可能会引入一个查询功能,允许列名以其表名开头。例如,查询可能会返回列名group.id
和person.id
。
编辑:根据Shadow的评论,问题不在于MariaDB(或MySql)。结果集确实包含多个“id”。领域。问题在于客户端库,在我的例子中是PDO。
答案 0 :(得分:2)
如果结果集中有多个列具有相同的名称,那么即使mysql返回所有列,但它们在结果集中也将具有相同的名称,除非您使用字段别名。创建了一个sqlfiddle来证明它here。您的客户端库可能无法区分2列。这是一个已知的问题,例如laravel。
mysql和mariadb都允许您使用表名称为字段名称添加前缀,但是,表名称不会作为字段名称的一部分返回。但是,大多数客户端库都能够检索mysql / mariadb返回的结果集中的列的元数据,其中包括非计算列的表名。例如,参见mysqli_fetch_field_direct()函数。
您可以使用从元数据中检索的表名来确定哪个id列属于哪个表。