2011-08-04 6 views
0

私はそれが可能ではないと思っていますが、とにかく質問すると思いました。クエリの列名が重複しています

私はそれは親切にも私の王女とユニコーンのすべてを返すことだな...

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

としてMySQL 5 +クエリを持っています;)。問題は、返された結果セットに重複した列名が含まれている可能性があります。両方のテーブルにnameという名前の列がある場合は、p.name as 'princess_name'u.name as 'unicorn_name'のようなエイリアスを明示的にコーディングせずにどのように区別できますか?

また、私は列インデックスを使用できませんので、より良い方法がない場合は、すべてのエイリアスを自分で手渡します。

+0

"エイリアスを明示的にコーディングせずに" - エイリアスには何が問題なのですか?クエリでエイリアスを使用しない場合、特に列名が同一の場合のユースケースは何ですか? –

+0

重複する列がある場合、一部のMySQLライブラリはテーブル名を自動的に列名に追加します。しかし、エイリアスを明示的に指定することは常に推奨されます。 – Karolis

答えて

4

SELECT *はいくつかの理由から悪い考えですが、そのうちの1つが見つかったばかりです。明示的な列リストを使用し、独自のエイリアスを作成します。

1

すべてのエイリアスを自分で手渡す必要があります。 ;)とにかく、それらを取り除く*は悪いことではありません。

1

*をSQLで使用することは避けてください。 これは悪い習慣です。あなたのすべてのフィールドを書き込むことは読みやすさとパフォーマンスのためには良いことですが、それを忘れないでください!

0

エイリアスを手渡す必要があります。 これは良いことです。すべての列名を明示的に記述することは常に良い考えです。

0

行を配列としてフェッチする場合は、データの順序に依存することができます。あなたがマップ/ディクショナリとしてそれらをフェッチするなら...あなたはたぶん運が悪いです。本当に、エイリアシングははるかに良いアイデアです。

PS。スター選択は悪い形式です。

0

文字列query1 = "アップロードファイルから列を表示する" +ラベル+ "'"; 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"); 
関連する問題