【发布时间】:2016-06-15 06:38:06
【问题描述】:
CREATE VIEW [0_NumOfCode] AS
SELECT tbDeviceId.deviceId,
count(DISTINCT tbCodeList_AV.codeNum) AS NumCode
FROM tbDeviceId
INNER JOIN
tbCodeList_AV ON tbDeviceId.deviceId = tbCodeList_AV.deviceId
GROUP BY tbDeviceId.deviceID
UNION
SELECT tbDeviceId.deviceID,
count(DISTINCT tbCodelist_AC.codeNum)
FROM tbDeviceId
INNER JOIN
tbCodelist_AC ON tbDeviceId.deviceId = tbCodelist_AC.deviceId
GROUP BY tbDeviceId.DeviceID;
上下文:我实际上正在创建一个使用 SQLite 并接受 .db 文件输入的 C++ 程序,所以我在这里给出的这个 SQL 代码(来自 db 文件)不是我的,我不知道'认为我不应该(或应该)改变它,但我面临一个令人困惑的问题,这就是我问这个问题的原因。
基本上,现在我想选择这个 0_NumOfCode 视图的 deviceId 列,但我该怎么做呢? 都没有
SELECT tbDeviceId.deviceId FROM [0_NumOfCode]
也没有
SELECT deviceId FROM [0_NumofCode]
也没有
SELECT [0_NumOfCode].deviceId FROM [0_NumOfCode]
完成了这项工作(“没有这样的列”错误)。但是,当我选择 * 时,列和数据确实显示在 tbDeviceId.deviceID 下
现在,我认为列的别名可能会解决问题,但就像我说的,我认为我不应该更改 SQL 代码。所以
1) 给定这段 SQL 代码,我该怎么做?
2) (出于我自己的好奇心)一个别名也可以解决它,对吧?
更新:我最初的问题已经解决(在 cmets 中),尽管我仍然对它的工作原理有点迷茫(' vs ` vs no quotes)。
另外,我面临的一个新问题:
SELECT tbdeviceid.DeviceID,
numcode,
numbrand,
devicename15,
devicename30,
comment,
devicenameCN
FROM tbdeviceid
INNER JOIN
[0_NumofBrand] ON tbdeviceid.deviceId = [0_NumofBrand].deviceId
INNER JOIN
[0_numofcode] ON tbdeviceid.deviceId = [0_numofcode].deviceId
最后一行给出没有这样的列错误。如何表示列?
【问题讨论】:
-
也许 SELECT `tbDeviceId.deviceId` FROM [0_NumOfCode] ?
-
另外一个别名也可以解决,用
select NumCode from 0_NumOfCode测试一下 -
“DeviceId”列可能不再包含表 tbDeviceId。通过“select * from tbDeviceId”进行验证。
-
成功了!非常感谢@amow :D (顺便说一句,我第一次尝试使用 ' 而不是 ` 但没有用,它们之间有什么区别?)
-
另外,是的,别名也可以解决,我测试过。