Выбирает ли функция SQL EXISTS дубликаты? (Oracle SQL) - PullRequest
0 голосов
/ 05 апреля 2020

t1 имеет все кредиты каждого человека в данной ORACLE базе данных. Каждый человек идентифицируется как ID. t2 содержит людей, которых мне нужно выбрать из t1.

. Для этого я попытался сделать следующее:

select
    ID,
    capital,
    balance
from
    t1
where
    exists (
        select ID
        from t2
        where t1.ID = t2.ID);

Моя проблема в том, что t2 имеет дубликат ID с. Так, например, если ID = 2 имеет 3 кредита и она повторяется 4 раза в t2, будет ли вышеуказанный запрос выбирать каждый из ее кредитов 4 раза? То есть я получу 3 х 4 кредита для ID = 2?

Как правило, я буду считать дубликаты кредитов из результата, но в настоящее время у меня нет уникального идентификатора для выбранных кредитов. Вот почему я спрашиваю это здесь, а не пытаюсь сгруппировать по количеству из результата запроса.

Ответы [ 2 ]

3 голосов
/ 05 апреля 2020

Нет. Написанный вами запрос возвращает только строки из t1. Вы не можете умножать строки, используя предложение where (ну, почти никогда, и не в Oracle).

Одна из причин использования exists или in состоит в том, что вам не нужно беспокоиться о дубликаты, как вам нужно беспокоиться с join.

1 голос
/ 05 апреля 2020

Нет - представьте exists как функцию True / False. True: возвращает> 0 строк; False: возвращает 0 строк. Так что не имеет значения, есть ли дубликаты.

...