我有一个数据库,其中有几个表,我试图从中获取一些数据。但由于布局(我对此无能为力),我似乎无法让正常的 JOIN 工作。
我有三张桌子:
- 约会者
- 程序
许可人
表中的“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 |
根据 SQL 选择查询的期望结果:
| Program | Computer name | Room | Kommentar|
|-------------------------------------------|
| Adobe Production Premium CS6 | MB-569B | 4.1 | NULL |
|-------------------------------------------|
查询 Windows 7 PRO 零售时所需的结果:
| 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 Retail”时的预期结果
简单来说,如果 program.VL 为 1,comp_name 将在 volymlicenser.comp_name 列中找到。
如果 program.VL 为 0,comp_name 将在 program.comp_name 列中找到。
找到 comp_name 后,它需要从 datorer.comp_name 上的任何这些表中加入 comp_name 以获取房间号。
我希望这对你和我一样有意义。