您如何检查子查询记录是不是在范围外部字段中?

Posted

技术标签:

【中文标题】您如何检查子查询记录是不是在范围外部字段中?【英文标题】:Ho do you check if subquery records are in range outer fields?您如何检查子查询记录是否在范围外部字段中? 【发布时间】:2014-02-01 03:17:23 【问题描述】:

两个表,tbljobtblscan

tblJob 有三个字段:

job_no job_start_seq job_end_seq

tblScan 有两个字段:

serialnumber facility_id

如何查询每个作业的所有序列号?

这是我想出来的,但它不正确。

SELECT     dbo.tblScan.facility_id, dbo.tblScan.serialnumber, dbo.tblJob.job_no
FROM         dbo.tblScan CROSS JOIN
                      dbo.tblJob
WHERE     EXISTS
               (SELECT     job_id, job_no, mailer, job_start_seq, job_end_seq
                FROM          dbo.tblJob AS tblJob_1
                WHERE      (dbo.tblScan.serialnumber BETWEEN job_start_seq AND job_end_seq))

感谢任何可以提供帮助的人。我有办法在这几个小时。如果您想知道数据结构是否可以更改,很遗憾,它不能。

【问题讨论】:

您的子选择没有意义。您应该只在主 SELECT 中有一个 WHERE 子句。 如何加入没有公共数据的表。我需要来自 tblJob 的数据? 【参考方案1】:

我从未使用过 sql-server,但话虽如此,我会这样写:

SELECT dbo.tblScan.facility_id, dbo.tblScan.serialnumber, dbo.tblJob.job_no
FROM   dbo.tblScan, dbo.tblJob
WHERE  dbo.tblScan.serialnumber BETWEEN job_start_seq AND job_end_seq

这将为您提供有关 facility_id 和 job_no 的“重复”,假设您可以有多个序列号。该示例也使用了您的代码,但您可能需要在 job_start_seq 和 job_end_seq 前面添加一些内容,例如 dbo.tblJob.

现在您有了所有的序列号,您可能需要对数据做一些工作,具体取决于您需要用它做什么。

仅供参考,这种语句称为叉积。

【讨论】:

谢谢大家。我让它根据需要工作。真是想多了。我想我需要结束它。【参考方案2】:

这样试试

SELECT TS.facility_id,TS.serialnumber,TJ.job_no
FROM dbo.tblScan TS CROSS JOIN  dbo.tblJob TJ ON
TS.serialnumber BETWEEN TJ.job_start_seq AND TJ.job_end_seq 

【讨论】:

以上是关于您如何检查子查询记录是不是在范围外部字段中?的主要内容,如果未能解决你的问题,请参考以下文章

在 Presto 中,如何检查我通过子查询获取的列表中是不是存在数组中的元素

Oracle SQL:对 CASE WHEN 重复使用子查询,而无需重复子查询

如何对查询中的字段进行编程,以在该记录的子数据表中显示逗号分隔的唯一值列表?

无效的子查询但外部查询返回记录

在子查询中引用外部查询

如何检查是不是在 Access 子表单中单击了空记录?