我有一个数据库,其中有一些表格正在尝试从中获取一些数据。 但由于布局(我不能做任何事情),我似乎无法得到正常的JOIN工作。根据另一个表格中单元格的值来连接表格
我有三个表:
- datorer
- 程序
volymlicenser
在该表中 “datorer” 是在多个计算机(与AD名,房间号和注册一个评论小区)。
表中“程序”是我的组织购买的不同程序。
表中“volymlicenser”是该组织拥有的少量许可证,即批量许可证。
这里的单元格是ID,RegKey和comp_name。
大多数程序都是OEM许可证,只能安装在一台计算机上,因此他们不需要将程序名称与所属计算机一起注册到另一个表中,例如批量许可证。
设计数据库时,它只包含最后两个表,不需要连接查询。最近他们添加了由上述单元组成的表“datorer”。
我想现在要做的是,最好通过一个单一的查询,看看布尔单元格program.VL是否设置为true。
如果是这样,我想在volymlicenser.RegKey上加入progran.RegKey,并从那里获取volymlicenser.comp_name的内容。
我尝试过的查询是以下..哪些不起作用。
SELECT
prog.Namn AS Program, prog.comp_name AS Datornamn,
pc.room AS Rum, pc.kommentar AS Kommentar
FROM
program AS prog
JOIN
datorer AS pc ON prog.comp_name = pc.comp_name
JOIN
volymlicenser AS vl ON vl.RegKey = prog.RegKey
WHERE
prog.Namn = "Adobe Production Premium CS6"
希望有人能帮助我。 :)
请不要问,如果有什么不完全清楚!
以下是示例的记录和所希望的结果:
表datorer
:
| id | comp_name | room | kommentar|
|----------------------------------|
| 1 | MB-56C5 | 1.1 | NULL |
| 2 | MB-569B | 4.1 | NULL |
表program
:
| id | Namn | amount | VL | RegKey | comp_name | leveranotor | purchased | note | Suite | SuiteContents |
|-----------------------------------------------------------------------------------------------|
| 1 | Adobe Production Premium CS6 | 2 | 1 | THE-ADOBE-SERIAL | NULL | Atea | 2012-11-01 | Purchased 2012 together with new computers | 1 | The contents of this suite |
| 2 | Windows 7 PRO retail | 1 | 0 | THE-MS-SERIAL | MB-569B | Atea | 2012-11-01 | Purchased 2012 together with new computers | 0 | NULL |
| 3 | Windows 7 PRO retail | 1 | 0 | THE-MS-SERIAL | MB-56C5 | Atea | 2012-11-01 | Purchased 2012 together with new computers | 0 | NULL |
表volymlicenser
:
| id | RegKey | comp_name |
|-----------------------------------|
| 1 | THE-ADOBE-SERIAL | MB-569B |
查询为Windows 7 PRO零售时
| Program | Computer name | Room | Kommentar|
|-------------------------------------------|
| Adobe Production Premium CS6 | MB-569B | 4.1 | NULL |
|-------------------------------------------|
期望的结果:
根据SQL SELECT查询所需的结果
| Program | Computer name | Room | Kommentar|
|-------------------------------------------|
| Windows 7 PRO Retail | MB-569B | 4.1 | NULL |
| Windows 7 PRO Retail | MB-56C5 | 1.1 | NULL |
期望的结果,如果 “WHERE” 被更改为“Windows 7 PRO零售“
简而言之,如果program.VL为1,则可以在volymlicenser.comp_name列中找到comp_name。
如果program.VL为0,则会在program.comp_name列中找到comp_name。
如果找到comp_name,它需要从datorer.comp_name上的任意这些表中加入comp_name以获取房间号。
我希望这对你来说同样适用于我。
在您的代码第6行中,有'ON v1.comp-name = ...'。这是一个错字吗?你想输入“v1.comp_name”吗?我问这是因为'-'是SQL中的一个运算符。也许这是你出错的地方。 – Rachcha 2013-04-30 19:08:44
是的,这实际上是一个错字。 :) – Rickard 2013-04-30 19:37:21
嗯,我在前段时间看到了一个建议,但是由于之间存在某种东西,所以没有立即尝试。 现在我去了这里试试看,它似乎已经消失了。它被删除或我疯了吗? – Rickard 2013-04-30 22:02:35