我刚刚开始学习MySQL。我已经研究了几个小时,不幸的是我找不到解决方案。我怀疑这很容易,我只是不知道该怎么做。我在这里或其他网站上找不到类似的情况。

这是一些示例数据

computer
+------------------+
idcomputer | name
1          | komp001
2          | komp002

computer_has_software
+---------------------------------------+
computer_idcomputer | software_idsoftware
1                   | 1
1                   | 2

software
+------------------+
idsoftware | name
1          | notepad
2          | eclipse
3          | firefox
4          | google chrome


如您所见,komp001同时安装了记事本和eclipse。

我想要一个查询,告诉我哪些软件可用,但未安装在komp001上-即,所有软件均不在komp001上。

我希望答案是Firefox和Google Chrome。

software
+------------------------+
idsoftware | name
3          | firefox
4          | google chrome

最佳答案

http://sqlfiddle.com/#!9/2914a/3

SELECT
s.*
FROM
  software as s
LEFT JOIN
  (SELECT
     *
   FROM
     computer_has_software
   WHERE
     computer_idcomputer = 1
  ) as chs
ON
  s.idsoftware = chs.software_idsoftware
WHERE
  chs.software_idsoftware IS NULL

10-08 19:35