Я думаю, вы поняли ПОЧТИ правильно со скопированным оператором SQL.
SELECT Account, Common_name FROM Customer ;
WHERE EXISTS (SELECT * FROM DayB WHERE DayB.Account = Customer.Account) ;
INTO CURSOR T1 ;
NOFILTER
Здесь вы выбираете 2 поля от клиента (Account и Common_Name). Где часть проверяет, если эти записи клиента также существуют в DayB, в зависимости от общего поля Учетная запись. 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.
СУЩЕСТВУЕТ, как указано выше.
Использование предложения IN:
SELECT Account, Common_name FROM Customer ;
WHERE Account in (SELECT Account FROM DayB) ;
INTO CURSOR T1 ;
NOFILTER
И ВНУТРЕННЕЕ СОЕДИНЕНИЕ:
SELECT Customer.Account, Customer.Common_name FROM Customer ;
INNER JOIN DayB ON DayB.Account = Customer.Account ;
INTO CURSOR T1 ;
NOFILTER
Последний, однако, будет повторять каждую строку от Customer столько раз, сколько совпадений в DayB. Это часто используется, когда вам также нужны поля из DayB.
По производительности, EXISTS, вероятно, лучший из них.