在SQL中查询一个表的有效方法,该表中的关系也不在另一个表中
一个相关的例子:在SQL中查询一个表的有效方法,该表中的关系也不在另一个表中,sql,Sql,一个相关的例子: table activity activity id | title 1 a 2 a2 3 b 4 b2 table people id | parent id | activity id | active 抓住所有符合以下条件的人: 在没有父项的特定活动中 在特定活动中,其父母不在同一活动中+不在同一相关活动中(即:a、a2) 到目前为止,我有一些不太理想的东西: SELE
table activity
activity id | title
1 a
2 a2
3 b
4 b2
table people
id | parent id | activity id | active
抓住所有符合以下条件的人:
- 在没有父项的特定活动中
- 在特定活动中,其父母不在同一活动中+不在同一相关活动中(即:a、a2)
SELECT p.pid FROM people p
left join activity a
on p.activityid = a.activityid
where p.active = 1
and a.title = 'a'
and EXISTS (
SELECT p1.pid from people p1
left join activity a1
on p1.activityid = a1.activityid
where p.parentid = p1.id
and a1.activityid != p.activityid
or p.parentid = 0
)
这不包括ParentID而不是'a2'或'b2'等。。
问题是我有我想要的目标活动id,但没有相关的活动,所以我想我应该以某种方式使用标题来代替?您不需要外部联接。
notexits
子句将对没有父母的人进行筛选
SELECT p.pid
FROM people p, activity a
WHERE p.activityid = a.activityid
AND p.active = 1 AND a.title = 'a'
AND NOT EXISTS
( SELECT 1 FROM people pp, activity pa
WHERE p.parentid = pp.id AND pp.activityid = pa.activityid
AND pa.title NOT LIKE a.title||'%'
);
谢谢我能够用我必须做的事情来完成这件事。最后在内部select中添加了IN子句。顺便说一句,SQL不喜欢| |'%'。比我以前的尝试快得多:)如果您在SQL Server上,请使用
+
进行字符串压缩,而不是|
。后者适用于甲骨文。