1

我创建了一个只有整数的表,称为 Integers,条目从 1 到 74 以找出已从表 ATO 中删除了哪些自动增量 ID,该表也有 74 行

SELECT Integers.ID
  FROM Integers
  LEFT JOIN ATO
    ON Integers.ID = ATO.ID
 WHERE ATO.ID IS NULL

是否有一个我可以使用的内部 SQL 范围表,比如 Range[1-74],这样我就可以不用创建这个“无用的”整数表了?就像是:

SELECT Range [1-74].ID
  FROM Integers
  LEFT JOIN ATO
    ON Range [1-74].ID = ATO.ID
 WHERE ATO.ID IS NULL

我正在使用 Microsoft Access 测试我的设计,因为它快速、肮脏且易于触发 SQL 查询。稍后我将移植到 MySQL。

4

2 回答 2

1

Access SQL 不支持你想要的。如果您非常想消除该Integers表,则可以替换为 UNION 查询。

SELECT 1 AS the_number
FROM Dual
UNION ALL
SELECT 2
FROM Dual
UNION ALL
... etc, up to ...
SELECT 74
FROM Dual

注意Dual是一个自定义表格,旨在仅包含一行。

但是我不确定SELECT你们可以UNION在一起多少个。如果 74 是可能的,它可能会很慢。

使用 Access SQL,Integers表格更容易。

如果您可以使用 SQL 以外的其他方法,则可以创建一个 VBA 过程来检查ATO表并确定表中缺少哪些范围值。

于 2013-09-22T20:28:12.387 回答
0

你可以使用 where 子句

SELECT Integers.ID from Integers left join ATO on Integers.ID=ATO.ID where ATO.ID is null 
AND Integers.ID BETWEEN 1 AND 74

更好的是,使用IN关键字

SELECT ID from Integers WHERE ID BETWEEN 1 AND 74 
AND Integers.ID NOT IN (SELECT ID FROM ATO)
于 2013-09-22T19:48:49.550 回答