У меня есть продавец и таблица клиентов, и я пытаюсь найти всех продавцов, которые живут в любом из городов, в которых живет покупатель (обратите внимание, что покупатель связан с конкретным продавцом c, но пока мы просто сравнивают город)
СОЗДАНИЕ ТАБЛИЦЫ (ORACLE)
CREATE TABLE SALESMAN (
SALESMAN_ID INT CONSTRAINT SALESMAN_PK PRIMARY KEY,
NAME VARCHAR2(15),
CITY VARCHAR2(10),
COMMISSION DECIMAL(4,2))
;
INSERT ALL
INTO SALESMAN VALUES(5001,'JAMES HOOG','NEW YORK',0.15)
INTO SALESMAN VALUES(5002,'NAIL KNITE','PARIS',0.13)
INTO SALESMAN VALUES(5005,'PIT ALEX','LONDON',0.11)
INTO SALESMAN VALUES(5006,'MC LYON','PARIS',0.14)
INTO SALESMAN VALUES(5003,'LAUSON HEN','SAN JOSE',0.12)
INTO SALESMAN VALUES(5007,'PAUL ADAM','ROME',0.13)
SELECT * FROM DUAL
;
CREATE TABLE CUSTOMER (
CUSTOMER_ID INT CONSTRAINT CUSTOMER_PK PRIMARY KEY,
CUST_NAME VARCHAR2(15),
CITY VARCHAR(10),
GRADE INT,
SALESMAN_ID INT,
CONSTRAINT FK_CUSTOMER_SALESMAN
FOREIGN KEY (SALESMAN_ID) REFERENCES SALESMAN (SALESMAN_ID))
;
INSERT ALL
INTO CUSTOMER VALUES (3002, 'NICK RIMANDO', 'NEW YORK', 100, 5001)
INTO CUSTOMER VALUES (3007, 'BRAD DAVIS', 'NEW YORK', 200, 5001)
INTO CUSTOMER VALUES (3005, 'GRAHAM ZUSI', 'CALIFORNIA', 200,5002)
INTO CUSTOMER VALUES (3008, 'JULIAN GREEN', 'LONDON', 300,5002)
INTO CUSTOMER VALUES (3004, 'FABIAN JOHSON', 'PARIS',300,5006)
INTO CUSTOMER VALUES (3009, 'GEOFF CAMEROON', 'BERLIN', 100,5003)
INTO CUSTOMER VALUES (3003, 'JOZY ALTIDOR', 'MOSCOW', 200,5007)
INTO CUSTOMER VALUES (3001, 'BRAD GUZAN', 'LONDON',NULL,5005)
SELECT * FROM DUAL
;
SELECT * FROM SALESMAN;
SALESMAN_ID NAME CITY COMMISSION
5001 JAMES HOOG NEW YORK .15
5002 NAIL KNITE PARIS .13
5005 PIT ALEX LONDON .11
5006 MC LYON PARIS .14
5003 LAUSON HEN SAN JOSE .12
5007 PAUL ADAM ROME .13
SELECT * FROM CUSTOMER;
CUSTOMER_ID CUST_NAME CITY GRADE SALESMAN_ID
3002 NICK RIMANDO NEW YORK 100 5001
3007 BRAD DAVIS NEW YORK 200 5001
3005 GRAHAM ZUSI CALIFORNIA 200 5002
3008 JULIAN GREEN LONDON 300 5002
3004 FABIAN JOHSON PARIS 300 5006
3009 GEOFF CAMEROON BERLIN 100 5003
3003 JOZY ALTIDOR MOSCOW 200 5007
3001 BRAD GUZAN LONDON - 5005
# EXPECTED OUTPUT
SALESMAN_ID NAME CITY COMMISSION
5001 JAMES HOOG NEW YORK .15
5006 MC LYON PARIS .14
5005 PIT ALEX LONDON .11
5002 NAIL KNITE PARIS .13
# QUERY 1
SELECT DISTINCT
SLS.*
FROM SALESMAN SLS, CUSTOMER CUST
WHERE SLS.CITY = CUST.CITY
# QUERY 2
SELECT * FROM SALESMAN SLS
WHERE EXISTS (SELECT SALESMAN_ID FROM CUSTOMER WHERE SLS.CITY = CUSTOMER.CITY)
# QUERY 3
SELECT * FROM SALESMAN SLS
WHERE SLS.SALESMAN_ID IN (SELECT DISTINCT CUST.SALESMAN_ID FROM CUSTOMER CUST WHERE SLS.CITY = CUST.CITY)
;
# OUTPUT FROM QUERY 3
SALESMAN_ID NAME CITY COMMISSION
5001 JAMES HOOG NEW YORK .15
5006 MC LYON PARIS .14
5005 PIT ALEX LONDON .11
В трех приведенных выше запросах запрос 1 и 2 дает ожидаемый результат, однако запрос 3 не предоставляет ожидаемый результат. Все запросы имеют одно и то же соединение между городом из таблицы продавца и клиента, но я не понимаю, почему запрос 3 дает другой результат.