查找具有多个选项的相关记录

时间:2018-05-10 19:22:39

标签: sql ms-access

我不确定如何命名这个问题。我试着解释我需要达到的目标。

我将从我们的客户那里获得一份列表,其中列出了每台机器上安装的软件。

示例_ 机器清单

Hostname  SW
PC001     SW001
PC001     SW002
PC002     SW003
PC002     SW001
PC003     SW003

软件列表

SW Name   Status
SW001     not okay
SW002     not okay
SW003     ready

我需要一个SQL或MS-Access logik才能找到所有只安装了状态好的SW的主机名

和 - 在adition中 - 我需要一个逻辑来告诉我什么样的软件产品需要可以在安装好软件的情况下使其他主机名可用。

目前我正在努力解决这个问题

RGDS 塞巴斯蒂安

1 个答案:

答案 0 :(得分:0)

我可以帮助你一点,但你必须自己做点什么,

首先,我首先修改了你的DDL代码

CREATE TABLE `machines` (
 `id` int(11) NOT NULL,
 `hostnames` varchar(20) NOT NULL,
 `id_soft` int(11) NOT NULL
)


CREATE TABLE `software` (
 `id_soft` int(11) NOT NULL,
 `software_name` varchar(20) NOT NULL,
  `status` varchar(20) NOT NULL
)

-

- 表machines

的索引
 ALTER TABLE `machines`
 ADD PRIMARY KEY (`id`),
 ADD KEY `id_soft` (`id_soft`);

-

- 表software

的索引
 ALTER TABLE `software`
 ADD PRIMARY KEY (`id_soft`);

-

- 表machines

的约束
 ALTER TABLE `machines`
 ADD CONSTRAINT `machines_ibfk_1` FOREIGN KEY (`id_soft`) REFERENCES 
`software` (`id_soft`);

这是您的查询,只显示状态为okey或准备就绪的主机名!

SELECT hostnames
FROM machines
LEFT JOIN software on machines.id_soft = software.id_soft
WHERE machines.id_soft = (SELECT software.id_soft from software 
            WHERE software.status like 'ready');

所以这肯定会对你有所帮助,但你必须独自完成其他事情,只有你找不到解决方案,我们才会在这里为你提供帮助。