[英]SQL query using data from different tables
我需要在SQL Developer中创建查询。 有表1。 表1中的数据如下:例1
ID_Number Time
12345 1
12345 2
12345 3
12345 4
12345 5
67890 1
67890 2
67890 3
etc.
该表1通过此ID_Number连接到表2,而我需要的代码号在此表2中。
但是有一个。 例如,在表1中,有ID_numbers,其中具有Time列,如本示例中从1-5所示。 然后是不同的ID_number,也从1-5开始。 然后在下面的“时间”列中有一些ID_number仅具有例如2、4、5。 例2
ID_Number Time
54321 2
54321 4
54321 5
我需要创建一个查询,该查询从Table2(通过ID_number连接到Table1)中删除所有Code_Number,但仅查询那些没有1-5(示例1)中所有ID_number的代码。
有什么办法可以使该查询成为可能? 如果我知道有一定数量的话。 例如5,所以也许我可以将它们与内部选择组合起来,例如,如果少于5,那么它将为我返回这些Code_Numbers吗?
这是我从您的评论和猜测中收集的:
因此,您的数据模型可能或多或少因此:
但是您采用了ID概念,因此得到:
使用更好的表和列名称:
是? 然后,您将从代码表中选择,但排除在code_times表中存在所有请求的时间编号的记录。 要查找具有所有时间编号的id_number,请按id_number分组并计算不同的时间编号。 然后使用找到的ID访问table2。
select code_number
from table2
where id_number not in
(
select id_number
from table1
where time in (1,2,3,4,5)
group by id_number
having count(*) = 5
);
如果在表1中一个code_number / time对可以出现多次,则用count(distinct time)
替换count(*)
count(distinct time)
。
您需要使用联接。
它看起来像:
SELECT t2.*
FROM t1
RIGHT OUTER JOIN t2 on t1.ID = t2.ID
WHERE t1.ID IS NULL
RIGHT OUTER JOIN
告诉SQL通过在左手表的数据中放入NULL来保留右手表上不匹配的行。
然后,我们过滤左表为NULL的位置,以便获得左表中不存在的结果。
根据注释更新了SQL:
SELECT t2.*
FROM t1
RIGHT OUTER JOIN t2 on t1.ID = t2.ID
AND t1.Time = t2.Time
WHERE t1.ID IS NULL
另外,请注意,SQL语法可能会根据所使用的版本而变化。
您可以通过比较两个表中的count
来执行此操作。
select t2.id
from t2
group by t2.id
having count(*) < (select count(*) from t1 where t1.id = t2.id group by t1.id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.