Teradata SQL - использование «ИЛИ» возвращает больше записей, чем ожидалось - PullRequest
0 голосов
/ 16 октября 2018

следующие два запроса возвращают около десяти записей по отдельности.

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5)
AND DATE = 300618 

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5)
AND DATE = 310718

Однако, когда я запускаю два запроса, объединенные вместе

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5)
AND DATE = 300618 
OR DATE = 310718

Возвращает сотни тысяч записей.Как это может быть?

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вам нужно использовать круглые скобки, если вы используете OR с AND:

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5) AND (DATE = 300618 OR DATE = 310718);

Однако это странно, если у вас больше дат, поэтому используйте вместо * огромные * * * * * OR с:

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5) AND DATE IN (300618, 310718);
0 голосов
/ 16 октября 2018

Используйте IN

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5)
AND DATE in ( 300618, 310718)
...