Необходимо написать запрос SQL: может быть только одно значение для другого конкретного значения - PullRequest
1 голос
/ 17 февраля 2011

Например, в таблице ADDRESSEs есть столбец ZIP_CODE.Почтовые индексы могут быть любыми, например, 90210, 45430, 45324. Может быть несколько экземпляров 90210 или любой другой почтовый индекс.Но для любого почтового индекса в столбце STATE может быть только одно значение.Если 90210 находится в столбце почтового индекса, столбец STATE ДОЛЖЕН быть CA, если есть другая запись с 90210 и имеет OH или GA или что-то еще, это неправильно.Я ищу найти эти конкретные почтовые индексы, которые имеют что-либо, кроме одного единственного значения в этом другом столбцеЭто не домашнее задание.

Ответы [ 4 ]

3 голосов
/ 17 февраля 2011
select zip_Code, count(distinct state)
from address
group by zip_code
having count(distinct state) > 1;
2 голосов
/ 17 февраля 2011

попробуйте это:

select zip_code, count(*)
  from (select distinct zip_code, state
          from address)
 group by zip_code
having count(*) > 1;
0 голосов
/ 23 февраля 2011

Самый простой способ создать это - иметь таблицу, которая содержит все допустимые комбинации почтового индекса и состояния, а затем использовать эти два столбца в качестве внешних ключей для таблицы, содержащей фактический адрес. Таким образом, любая недопустимая комбинация состояния / ZIP нарушит ограничение внешнего ключа. Этот подход будет работать, даже если почтовый индекс пересекает строки состояния, если вы не сделаете поле почтового индекса в таблице поиска уникальным ключом. Недостатком этого подхода является то, что вам необходимо предварительно заполнить таблицу поиска и поддерживать ее в актуальном состоянии, что будет означать оплату USPS за их списки.

Если вы действительно настаиваете на подходе «один штат на ZIP» и / или не хотите покупать список у USPS, вы все равно можете использовать аналогичный подход. Опять же, вам понадобится таблица соответствия с состоянием и ZIP, но на этот раз вы захотите сделать ZIP уникальным ключом. Поскольку записи добавляются в таблицу, содержащую адреса, вы можете использовать триггер для заполнения таблицы поиска, когда почтовый индекс еще не существует. Это добавит немного накладных расходов, но в большинстве случаев не будет достаточным для беспокойства.

0 голосов
/ 17 февраля 2011
select count(*), zip_code 
from address 
group by zip_code 
having count(*) > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...