好的,我很难命名这个问题。但是很难用一个简单的标题来描述。
我有一个名为Stock的表,其中包含: 股票(BarCode,MagId,格式)
一张名为杂志的表格: 杂志(MagId,Title,ReleaseDate)
有两种杂志格式:打印和在线
有些杂志只能在线或仅在印刷时使用。有些人都在。
我需要为仅从Stock表打印的杂志选择MagId。然后我需要列出他们的标题和发布日期。
所以,我开始:
SELECT Title, ReleaseDate
FROM Magazines
WHERE MagId IN ( SELECT MagId
FROM Stock
WHERE Format = 'Print'
AND Format <> 'Online' );
我没有得到预期的结果。我认为因为只选择印刷杂志的子查询是错误的。
任何人都能解释一下吗?
谢谢:)
答案 0 :(得分:6)
因为您只有两种格式,所以可以通过获取所有没有“在线”格式的杂志来实现这一目标:
SELECT Title, ReleaseDate
FROM Magazines
WHERE MagId NOT IN (SELECT MagId
FROM Stock
WHERE Format = 'Online' );
如果您有两种以上的格式,则可以将Format = 'Onliine'
更改为Format in (<list goes here>)'
。
编辑:
如果您想要一个版本表达为“格式仅 { 'Online'
”的杂志,而不是“格式绝不是”的杂志,而不是'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'
”。
答案 1 :(得分:1)
你确定吗,
Format = 'Print' AND Format <> 'Online'
对于Stock表中的任何行,条件是否会成立?试试这个,
SELECT Title, ReleaseDate
FROM Magazines
WHERE MagId IN ( SELECT MagId
FROM Stock
WHERE Format = 'Print');
Format = 'Print'
以上条件将成为现实,
我相信这就是你想要的。