我认为复制的 SQL 语句几乎是正确的。
SELECT Account, Common_name FROM Customer ;
WHERE EXISTS (SELECT * FROM DayB WHERE DayB.Account = Customer.Account) ;
INTO CURSOR T1 ;
NOFILTER
在这里,您从客户中选择 2 个字段(帐户和 Common_Name)。其中部分检查这些客户记录是否也存在于 DayB 中,具体取决于常见字段 Account。如果您还将 Customer 别名为 cust,Cust.Account 将是正确的。即:
SELECT Account, Common_name FROM Customer Cust;
WHERE EXISTS (SELECT * FROM DayB WHERE DayB.Account = Cust.Account) ;
INTO CURSOR T1 ;
NOFILTER
经常使用这种别名,为游标提供较短的别名。
在 EXISTS 检查中,您选择的内容并不重要,它可以是 Select Account、Select * 甚至像 Select 1 这样的常量。无论在哪里,它都不会被选中,EXISTS 子句仅检查是否存在并返回一个布尔值。
最后,我们添加了 NOFILTER 作为经验法则,以防止过滤行并创建所谓的“真正的游标”。
现在,多一点入门。当您需要检查另一个表中也存在的行时,基本上有 3 个 SQL 构造可以做到这一点。
EXISTS 检查如上。
使用 IN 子句:
SELECT Account, Common_name FROM Customer ;
WHERE Account in (SELECT Account FROM DayB) ;
INTO CURSOR T1 ;
NOFILTER
和 INNER JOIN:
SELECT Customer.Account, Customer.Common_name FROM Customer ;
INNER JOIN DayB ON DayB.Account = Customer.Account ;
INTO CURSOR T1 ;
NOFILTER
然而,最后一个重复来自客户的每一行的次数与 DayB 中的匹配次数一样多。当您也需要来自 DayB 的字段时,通常会使用该字段。
在性能方面,EXISTS 可能是其中最好的一个。