好吧,我很难命名这个问题。但是很难用一个简单的标题来描述它。
我有一个名为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'
”。