Несколько операторов IN для ГДЕ. Вернет ли это хорошие данные? - PullRequest
0 голосов
/ 11 мая 2010
SELECT ['VISA CK  - 021810$'].[ACCT NBR     #1], ['VISA CK  - 021810$'].[ALT CUST NM  #1], ['VISA CK  - 021810$'].[LAST USED]
FROM ['VISA CK  - 021810$']
WHERE ['VISA CK  - 021810$'].[ALT CUST NM  #1] 
    IN (
        SELECT ['VISA CK  - 021810$'].[ALT CUST NM  #1]
        FROM ['VISA CK  - 021810$']
        GROUP BY ['VISA CK  - 021810$'].[ALT CUST NM  #1]
            HAVING COUNT(['VISA CK  - 021810$'].[ALT CUST NM  #1]) > 1
        )
    AND ['VISA CK  - 021810$'].[ACCT NBR     #1]
    IN (
        SELECT ['VISA CK  - 021810$'].[ACCT NBR     #1]
        FROM ['VISA CK  - 021810$']
        GROUP BY ['VISA CK  - 021810$'].[ACCT NBR     #1]
            HAVING COUNT(['VISA CK  - 021810$'].[ACCT NBR     #1]) > 1
        )

Ответы [ 3 ]

0 голосов
/ 11 мая 2010

Да, он вернул бы хорошие данные. Предложение WHERE гарантирует, что оба предложения IN будут соблюдены, прежде чем возвращать какие-либо данные, когда вы используете AND.

0 голосов
/ 11 мая 2010

Переписано с использованием JOIN:

SELECT t.[ACCT NBR     #1], 
       t.[ALT CUST NM  #1], 
       t.[LAST USED]
  FROM ['VISA CK  - 021810$'] t
  JOIN (SELECT ['VISA CK  - 021810$'].[ALT CUST NM  #1]
          FROM ['VISA CK  - 021810$']
      GROUP BY ['VISA CK  - 021810$'].[ALT CUST NM  #1]
        HAVING COUNT(['VISA CK  - 021810$'].[ALT CUST NM  #1]) > 1) x ON x.[ALT CUST NM  #1] =   t.[ALT CUST NM  #1] 
  JOIN (SELECT ['VISA CK  - 021810$'].[ACCT NBR     #1]
          FROM ['VISA CK  - 021810$']
      GROUP BY ['VISA CK  - 021810$'].[ACCT NBR     #1]
        HAVING COUNT(['VISA CK  - 021810$'].[ACCT NBR     #1]) > 1) y ON y.[ACCT NBR     #1] = t.[ACCT NBR     #1]

Убедитесь, что он возвращает ожидаемые вами данные - настройтесь после этого. Предполагая, что вы указали правильный запрос, JOINs, как правило, предпочтительнее подзапросов, но просмотр и сравнение плана выполнения подскажут, что лучше для вашей ситуации.

0 голосов
/ 11 мая 2010

Это допустимая конструкция SQL, но мы не можем комментировать, работает она или нет.

Вы говорите: для каждой строки в ['VISA CK - 021810$'] верните эту строку, если я найду совпадения для [ACCT NBR #1] и [ALT CUST NM #1] в их относительных предложениях IN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...