Sql 奇怪的选择错误代码
好的。在某些表上运行简单的select时,如:Sql 奇怪的选择错误代码,sql,sql-server,Sql,Sql Server,好的。在某些表上运行简单的select时,如: SELECT ValidoDa, Tab_Ticket_Default, * FROM Dipendente_Stor WHERE CodiceAbi = '08753' and Matricola = 98 order by ValidoDa 我可以得到错误“不明确的列名'ValidoDa'” 原因是什么?只有一个文件名为ValidoDa 你能解释一下这种行为吗?有一列有这
SELECT
ValidoDa,
Tab_Ticket_Default,
*
FROM
Dipendente_Stor
WHERE
CodiceAbi = '08753' and
Matricola = 98
order by
ValidoDa
我可以得到错误“不明确的列名'ValidoDa'”
原因是什么?只有一个文件名为ValidoDa
你能解释一下这种行为吗?有一列有这个名字,但是你在
选择列表中显示了两次
这本身不是一个问题,SQL允许这样做(尽管我认为这是该语言的一个主要设计缺陷)
当您尝试在ORDER BY
子句中使用该列时,问题再次出现。现在(有两列名称相同),SQL抱怨说它不知道您指的是哪一列。因为您选择了两次字段ValidoDa,一次显式选择,然后再次选择*
试一试
或
我想那句话
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
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
SELECT
ValidoDa AS DaQuando,
Tab_Ticket_Default,
*
FROM
Dipendente_Stor
WHERE
CodiceAbi = '08753' and
Matricola = 98
order by
DaQuando
SELECT
ValidoDa AS ValidoDaFOO,
Tab_Ticket_Default,
*
FROM
Dipendente_Stor
WHERE
CodiceAbi = '08753' and
Matricola = 98
order by
ValidoDa
-- or ValidoDaFOO