0

コマンドを使用してJOIN、SqlDataSource の 2 つのテーブルを接続しています。

 <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:CS %>" 
        SelectCommand="SELECT UserName as UN, AboutMe, WebPage, Email FROM Users JOIN ProfileImages ON ProfileImages.UserName = Users.UN WHERE (UN = @UserName)" >
</asp:SqlDataSource>

MS SQL Server Management Studio では、このコマンドは問題ありません。しかし、SqlDataSource ではエラーが返されます -無効な列名 'UN'あいまいな列名 'UserName'

これらのエラーを返さないように、SqlDataSource でこのコマンドをエイリアスするにはどうすればよいですか?

4

3 に答える 3

2

あなたのクエリは少し間違っていますあなたはエイリアスiaを間違った方法で使用しました

最初:次のセクションでエイリアスを使用できます。

  • 田畑。UNとしてのユーザー名の例
  • テーブル名:米国としてのUserTable
  • セクション別注文の例:国連による注文説明

これは、SQLが次の順序でクエリ操作を実行するためです。

  1. FROM句
  2. WHERE句
  3. GROUPBY句
  4. HAVING句
  5. SELECT句
  6. ORDERBY句

したがって、句が最初に実行されるため、SQLは句FROM内のエイリアスを認識しません。SELECT

正しいクエリを見てください

SELECT 
    UserName as UN,
    AboutMe,
    WebPage,
    Email 
FROM Users 
JOIN ProfileImages ON ProfileImages.UserName = Users.UserName 
WHERE (Users.UserName = @UserName)
于 2013-02-18T19:21:35.450 に答える
1

私は SQL の専門家ではありませんが、ProfileImages と Users の両方に列 'UserName' が含まれている場合、選択列で UserName を取得するテーブルを指定する必要があります。次のようなものです:

SELECT Users.UserName as UN, Users.AboutMe, Users.WebPage, Users.Email 
FROM Users
JOIN ProfileImages ON ProfileImages.UserName = Users.UserName 
WHERE (Users.UserName = @UserName)
于 2013-02-18T19:13:40.400 に答える
0

where句で列エイリアスを使用することはできません。

    SELECT UserName as UN, AboutMe, WebPage, Email 
    FROM Users usersAlias JOIN ProfileImages piAlias ON piAlias.UserName = usersAlias.UserName 
WHERE (usersAlias.UserName = @UserName)

実行の順序を見ると、それは理にかなっています。

http://blog.sqlauthority.com/2009/04/06/sql-server-logical-query-processing-phases-order-of-statement-execution/

実行の順序は次のとおりです。これらのフェーズとその順序は次のとおりです。

  1. から
  2. オン
  3. アウター
  4. どこ
  5. GROUP BY
  6. CUBE | 巻き上げる
  7. 持っている
  8. 選択する
  9. DISTINCT10注文者

これらが処理されているとき(「from」(#1)と「on」(#2)と「where」(#4))。彼らは「select」(#8)(別名、 UNのエイリアス名)。select句の列エイリアスは、WHERE句とFROM(およびON)句では使用できません。

于 2013-02-18T19:21:11.037 に答える