好吧,我很难命名这个问题。但是很难用一个简单的标题来描述它。

我有一个名为Stock的表,该表具有:
库存(条形码,MagId,格式)

一张名为Magazines的桌子有:
杂志(MagId,标题,ReleaseDate)

有两种杂志格式:印刷和在线

某些杂志仅在线提供或仅以印刷形式提供。两者都有。

我需要为“库存”表中仅打印的杂志选择MagId。然后,我需要列出他们的Title和ReleaseDate。

因此,我开始于:

SELECT Title, ReleaseDate
FROM Magazines
WHERE MagId IN ( SELECT MagId
                    FROM Stock
                    WHERE Format = 'Print'
                    AND Format <> 'Online' );

我没有得到预期的结果。我认为是因为仅选择印刷杂志的子查询是错误的。

谁能给我一些启示?

谢谢 :)

最佳答案

因为只有两种格式,所以可以通过获取所有没有“在线”格式的杂志来做到这一点:

SELECT Title, ReleaseDate
FROM Magazines
WHERE MagId NOT IN (SELECT MagId
                    FROM Stock
                    WHERE Format = 'Online' );

如果您使用两种以上的格式,则可以将Format = 'Onliine'更改为Format in (<list goes here>)'

编辑:

如果您想要一个将其表示为“格式仅为'Online'的杂志”而不是“格式为永不“not 'Online'的杂志”)的版本:
SELECT m.Title, m.ReleaseDate
FROM Magazines m join
     (select MagId
      from Stock s
      group by MagId
      having  count(*) = sum(Format = 'Online')
     ) sm
     on m.MagId = sm.MagId;
having子句说“找到的所有格式都是'Online'”。

09-26 17:20