3

だから、私はこのクエリを持っています

SELECT
    NOTES,
    DATECREATED,
    DATEMODIFIED,
    * 
FROM myTable
WHERE
    USERCREATEDBY = 465
    AND NOTES LIKE ' :%'
ORDER BY DATECREATED

このエラーがスローされますAmbiguous column name 'DATECREATED'

クエリに問題はありませんが、 のDATECREATEDように column にエイリアスを追加し、エイリアスDATECREATED aで並べ替えるという形でこれを修正する方法を見つけましたORDER BY a

なぜこれが起こるのか理解できず、その理由を知りたいと非常に興味があります。

4

5 に答える 5

5

おそらく、DATECREATED を 2 回、列として 1 回、* で 1 回選択しているためです。

SELECT *
FROM myTable
WHERE
  USERCREATEDBY = 465
  AND NOTES LIKE ' :%'
ORDER BY DATECREATED

うまくいくはずです

于 2013-05-24T07:36:57.453 に答える
3

リストに 2 回DATECREATED表示されるためです。SELECT

この場合、両方のインスタンスが同じ基になる列を参照していますが、それでも無効な構文です。一般に、異なる列を参照する同じ名前の 2 つの射影列を持つことができます。

SELECT
    DATECREATED AS D,
    DATEMODIFIED AS D
FROM myTable
ORDER BY D /*Obviously ambiguous*/

ちなみに、ORDER BY DATECREATEDベーステーブルの列に対して解決されるため、任意の種類の式をに適用するとあいまいさが解決されます。

CREATE TABLE myTable
(
NOTES VARCHAR(50),
DATECREATED DATETIME,
DATEMODIFIED DATETIME
)


SELECT
    NOTES,
    DATECREATED,
    DATEMODIFIED,
    * 
FROM myTable
ORDER BY DATECREATED + 0 /*Works fine*/

ただし、これについてはついでに触れておきます。これを行うべきであるという提案は絶対にありません。

于 2013-05-24T07:37:20.037 に答える
3

テーブルにこの列が含まれている場合、この列を上記で2 回DATECREATED選択しています。1回は明示的に、1 回は.SELECT*

結果セットには2 つの列が含まれるようになりましたDATECREATED。どちらORDER BYに適用しますか??

必要な完全な列リストを明示的に指定するか、少なくともDATECREATED列のエイリアスを指定します。

SELECT
    NOTES,
    SecondDateCreated = DATECREATED,
    DATEMODIFIED,
    * 
FROM myTable
WHERE
    USERCREATEDBY = 465
    AND NOTES LIKE ' :%'
ORDER BY DATECREATED
于 2013-05-24T07:37:24.600 に答える
1

順序付けに使用する列をORDER BY理解できないようです。句DATECREATEDで 2 回指定しました。SELECT

于 2013-05-24T07:37:28.337 に答える
0

これを試して:

SELECT
    NOTES,
    DATECREATED,
    DATEMODIFIED,
    * 
FROM myTable
WHERE
    USERCREATEDBY = 465
    AND NOTES LIKE ' :%'
ORDER BY 2
于 2013-05-24T08:36:45.310 に答える