2011-08-04 89 views
0

我不认为这是可能的,但我想我会问无论如何。查询中重复的列名称

我有一个MySQL 5 +查询这样...

SELECT p.*, u.* FROM princess p JOIN unicorn u ON p.id = u.princess_id 

这是一种足以回报我所有的公主和独角兽的)。问题是返回的结果集可能包含重复的列名(不好)。如果两个表都有一个名为name的列,我如何区分它而不显式编码别名,如p.name as 'princess_name'u.name as 'unicorn_name'

另外,我不能使用列索引,所以如果没有更好的方法,我只需要手动编写所有别名。

+0

“没有显式编码别名” - 别名有什么问题?在查询中不使用别名背后有什么用例,特别是当列名相同时? –

+0

如果存在重复的列,则某些MySQL库会自动将列别名添加到列名称。但总是建议明确指定别名。 – Karolis

回答

4

SELECT *由于几个原因,其中一个你刚刚发现是不好主意。使用明确的列列表并创建您自己的别名。

1

您必须自己手动编写所有别名。 ;)无论如何,摆脱那些*不会是一件坏事。

1

这是不可能的,并且也尽量避免在SQL中使用*。 这是一个坏习惯。写你的所有领域更好的可读性和性能,不要忘记!

0

您将不得不手动编码别名。 这很好。明确提及所有列名称总是一个好主意。

0

如果您将行作为数组提取,您可以依赖数据的顺序。如果你将它们作为地图/字典获取......你可能运气不好。实际上,别名是一个更好的主意。

PS。明星选择是不好的形式。

0

String query1 =“SHOW COLUMNS FROM uploadfile LIKE'”+ label +“'”; ResultSet rs = st.executeQuery(query1);

      while(rs.next()) 
          { 
         // int rs = 0; 

           pw.println("<script>alert(' throw new DuplicateName()')</script>"); 

           pw.write("Error in file insertion"+rs); 
           response.sendRedirect("AddAttribute.jsp?status='Error'"); 

          } 

           String query ="ALTER TABLE uploadfile ADD "+label+" varchar (10)"; 
           System.out.println("welcome in java "); 

           int rs1=st.executeUpdate(query); 


           response.sendRedirect("afterlabel_updatefile.jsp?status='success'"); 

          // response.sendRedirect("AdminHome.jsp");