Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中查询一个表的有效方法,该表中的关系也不在另一个表中_Sql - Fatal编程技术网

在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上,请使用
+
进行字符串压缩,而不是
|
。后者适用于甲骨文。