所以,我有这个查询
SELECT
NOTES,
DATECREATED,
DATEMODIFIED,
*
FROM myTable
WHERE
USERCREATEDBY = 465
AND NOTES LIKE ' :%'
ORDER BY DATECREATED
并抛出此错误Ambiguous column name 'DATECREATED'
。
我发现我的查询没有任何问题,我通过向DATECREATED
列添加别名以及按别名DATECREATED a
排序的形式找到了解决方法。
我不明白为什么会这样,我很想知道为什么。
答案 0 :(得分:5)
这可能是因为你选择DATECREATED两次,一次是作为一列,一次是*
SELECT *
FROM myTable
WHERE
USERCREATEDBY = 465
AND NOTES LIKE ' :%'
ORDER BY DATECREATED
应该可以正常工作
答案 1 :(得分:3)
因为DATECREATED
列表中出现SELECT
两次。
在这种情况下,两个实例都引用相同的基础列,但它仍然是无效的语法。通常,您可以使用两个具有相同名称的投影列来引用不同的列。
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*/
我只是顺便提一下。绝对不是你应该这样做的建议。
答案 2 :(得分:3)
好吧,如果您的表格中包含此列DATECREATED
,那么您将使用上述SELECT
选择此列两次 - 一旦显式,一次隐式使用{ {1}}。
因此,您的结果集现在包含名为*
的两列 - 您希望将DATECREATED
应用于哪一个?
显式指定所需的完整列列表,或者至少为ORDER BY
列提供别名:
DATECREATED
答案 3 :(得分:1)
似乎ORDER BY
无法理解应该使用哪个DATECREATED
列进行排序。您在SELECT
子句中指定了两次。
答案 4 :(得分:0)
试试这个:
SELECT
NOTES,
DATECREATED,
DATEMODIFIED,
*
FROM myTable
WHERE
USERCREATEDBY = 465
AND NOTES LIKE ' :%'
ORDER BY 2