首先,我想对我重复的内容感到抱歉,我真的没有找到任何可以帮助我的东西。我对真正的SQL开发还很陌生,所以如果有人甚至可以向我指出一些资源,我将非常感谢。
问题:
我不确定如何处理问题,我怀疑需要 public CaseDetailsViewModel(INavigation navigation)
{
IGetDataFromServer cases = new GetDataFromServer();
Navigation = navigation;
GetCases = cases.GetCases().FirstOrDefault();
}
public CasesFull GetCases { get; set; }
和UNION
。
摘要:
表1:user1所查看文章的历史记录(1列带有文章ID)
表2:user2所查看文章的历史记录(1列带有文章ID)
表3:文章(更多列具有ID)
现在,我希望在LEFT OUTER JOIN
和UNION
历史之间找到一个user1
,并获取尚未看到但仅限于10的文章ID。
伪代码:
user2
预期结果是在联合表中找不到的商品ID列表。还有其他更好的方法吗?子查询或过程?
答案 0 :(得分:3)
您需要LEFT OUTER JOIN
和UNION
结果集,但您也可以这样做:
WITH CTE AS (
<UNION Query here>
)
SELECT TOP (10) a.*
FROM article a
WHERE NOT EXISTS (SELECT 1 FROM CTE c WHERE c.ID = a.ID);
您可以使用OUTER JOIN
进行过滤:
SELECT TOP (10) a.*
FROM article a LEFT OUTER JOIN
CTE c
ON c.id = a.id
WHERE c.id IS NULL;
答案 1 :(得分:0)
您还可以使用子查询
select * from articles a
where a.id not in (
select u.id from UnionTable u
)
但我更喜欢左联接
select * from articles a
left join UnionTable u on u.id=a.id
where u.id is null
答案 2 :(得分:0)
我会这样写:
SELECT TOP (10) a.*
FROM article a
WHERE NOT EXISTS (SELECT 1 FROM user1 v WHERE v.ID = a.ID) AND
NOT EXISTS (SELECT 1 FROM user2 v WHERE v.ID = a.ID) ;
这可以利用user1(id)
和user2(id)
上的索引。
不过,更重要的是,您应该修复数据模型。您应该有一个表userArticles
,其中包含以下信息:
create table userArticles (
userArticleId int identity(1, 1) primary key,
userId int references users(userId),
articleId int references articles(articleId),
viewDateTime datetime default getdate()
);
通过多个表传播诸如视图之类的信息不是一个好主意。