Ho threre。当我在某些表上运行简单选择时:
SELECT
ValidoDa,
Tab_Ticket_Default,
*
FROM
Dipendente_Stor
WHERE
CodiceAbi = '08753' and
Matricola = 98
order by
ValidoDa
我可以收到错误“Ambiguous column name'ValidoDa'”
是什么原因?只有一个名为ValidoDa的文件!
你能解释一下这种行为吗?
答案 0 :(得分:4)
有一个具有此名称的列,但您在SELECT
列表中显示了两次!
这本身不是问题,SQL允许(尽管我认为这是该语言的一个主要设计缺陷)。
当您尝试在ORDER BY
子句中使用该列时,问题会重新出现。现在(有两个同名的列)SQL抱怨它无法知道你的意思。
答案 1 :(得分:3)
ORDER BY将首先尝试解析SELECT列列表。
在这种情况下,您有ValidoDa
两次因此不明确
您可以使用别名修复此问题,但无论如何SELECT *
都是不好的做法
SELECT
ValidoDa AS ValidoDaFOO,
Tab_Ticket_Default,
*
FROM
Dipendente_Stor
WHERE
CodiceAbi = '08753' and
Matricola = 98
order by
ValidoDa
-- or ValidoDaFOO
答案 2 :(得分:2)
因为你选择ValidoDa字段两次 - 一次是明确的,然后是*。
尝试
SELECT ValidoDa,
Tab_Ticket_Default,
*
FROM
Dipendente_Stor
WHERE
CodiceAbi = '08753'
and
Matricola = 98
order by
1
或
SELECT ValidoDa,
Tab_Ticket_Default,
** all the other fields of Dipendente_Stor **
FROM
Dipendente_Stor
WHERE
CodiceAbi = '08753'
and
Matricola = 98
order by
ValidoDa
答案 3 :(得分:2)
我想那说
order by ValidoDa
SQL不知道要使用哪个字段:显式ValidoDa
或*.ValidoDa
。如果你真的需要*
(我会删除它),那么用别名调用第一个ValidoDa:
SELECT
ValidoDa AS DaQuando,
Tab_Ticket_Default,
*
FROM
Dipendente_Stor
WHERE
CodiceAbi = '08753' and
Matricola = 98
order by
DaQuando