在MySQL中选择不同的值

时间:2013-12-17 22:36:03

标签: mysql

我无法找到以下问题的解决方案:

  

哪些供应商(lev)只能提供爱好部门出售的物品?

  • 供应商在 leverancier
  • 表中
  • 文章在 artikel
  • 表中
  • inkart 连接 leverancier artikel
  • 部门位于 afdeling
  • 表中
  • verkart 连接 artikel afdeling

enter image description here

我到目前为止的查询是:

SELECT DISTINCT leverancier.lev 
FROM leverancier

JOIN inkart ON leverancier.lev = inkart.lev
JOIN artikel ON inkart.art = artikel.art
JOIN verkart ON artikel.art = verkart.art
JOIN afdeling ON verkart.afd = afdeling.afd

WHERE afdnaam = 'Hobby'

但这仍然包括除了爱好文章之外还供应其他文章的供应商。什么是过滤它们的最佳方法?

2 个答案:

答案 0 :(得分:1)

SELECT DISTINCT leverancier.lev , AFDNAAM
FROM leverancier
JOIN inkart ON leverancier.lev = inkart.lev
JOIN artikel ON inkart.art = artikel.art
JOIN verkart ON artikel.art = verkart.art
JOIN afdeling ON verkart.afd = afdeling.afd
WHERE AFDNAAM = 'HOBBY'
EXCEPT
SELECT DISTINCT leverancier.lev , AFDNAAM
FROM leverancier
JOIN inkart ON leverancier.lev = inkart.lev
JOIN artikel ON inkart.art = artikel.art
JOIN verkart ON artikel.art = verkart.art
JOIN afdeling ON verkart.afd = afdeling.afd
WHERE AFDNAAM <> 'HOBBY'

答案 1 :(得分:1)

我认为解决此问题的最简单方法是使用聚合:

SELECT leverancier.lev , AFDNAAM
FROM leverancier JOIN
     inkart
     ON leverancier.lev = inkart.lev JOIN
     artikel
     ON inkart.art = artikel.art JOIN
     verkart ON artikel.art = verkart.art JOIN
     afdeling ON verkart.afd = afdeling.afd
GROUP BY leverancier.lev
HAVING MIN(AFDNAAM) = MAX(AFDNAAM) and
       MIN(AFDNAAM) = 'HOBBY';

也就是说,'HOBBY'是供应商数据中唯一的部门。