Перекрестное применение запроса к одной и той же таблице SQL
Привет, у меня есть таблица, которую мне нужно самостоятельно запросить. Не слишком уверен, Нужно ли это делать с помощью соединения или перекрестного апли и т. д.
Стол стоит :
Авторизацию(AutheriseID(ПК), идентификатор пользователя, имя, AccountNumber, Имя_учетной_записи, матч, частота)
Мне нужно найти в таблице верхнюю запись с частотой 1, а также убедиться, что совпадение уже не существует в другой таблице:
select top 1* from authorise where NOT EXISTS (SELECT * FROM trained WHERE authorise.name = trained.name AND authorise.accountnumber = trained.accountnumber) and frequency = 1 order by UID
Это прекрасно работает. Но тогда мне также нужно получить остальные совпадения в таблице авторизации, которые соответствуют выбранному UID и номеру учетной записи вместе. Но нужно убедиться, что это все, что относится к вершине 1, где частота = 1.
Итак, в моей таблице, если следующая запись была результатом:
<pre> select top 1* from authorise where NOT EXISTS (SELECT * FROM trained WHERE authorise.name = trained.name AND authorise.accountnumber = trained.accountnumber) and frequency = 1 order by UID
(10, 19, "Тест", 28, "Тест12", "Тест", 1)
И я хотел получить другие совпадения, связанные с тем же UID-19 и AccountNumber-28, тогда я получу больше записей, которые имеют совпадения и разные частоты. (Совпадения-это подстроки, поэтому я проверяю все реальные подстроки, чтобы определить хорошее совпадение по полной строке) DSo если бы было больше совпадений с этими UID и Accountnumber, это могло бы выглядеть следующим образом:
(10, 19, "Тест 12", 28, "Тест 12", "Тест", 1)
(134, 19, "Тест 12", 28, "Тест 12", "12", 4)
Это означает, что он совпал на двух подстроках исходного имени Test и 12
Что я уже пробовал:
Я пробовал это, но дает мне ошибки:
select * from authorise where UID and AccountNumber esists( select top 1 * from authorise where NOT EXISTS (SELECT * FROM trained WHERE authorise.resellername = trained.resellername AND authorise.accountnumber = trained.accountnumber) and frequency = 1 order by UID)
Richard MacCutchan
Какие ошибки?
CPuser2020
Привет, Ричард, я разобрался с этим, разделив "где":
выбрать различные * из авторизацию, где жидкость в (
выберите top 1 UID из authorize where NOT EXISTS (выберите *
Из подготовленных
Где именно authorise.name = trained.name и еще
authorize.accountnumber = trained.accountnumber) и frequency = 1 order by UID) и AccountNumber IN(
выберите top 1 ACCOUNTNUMBER из authorize where NOT EXISTS (выберите *
Из подготовленных
Где именно authorise.name = trained.name и еще
authorize.accountnumber = trained.accountnumber) и frequency = 1 order by UID)
Maciej Los
Если вы решили свою проблему, пожалуйста, удалите этот вопрос или предоставьте ответ.
#realJSOP
Предоставьте ответ-это желаемый путь, потому что он поможет кому-то еще, у кого есть подобная проблема.
CPuser2020
Привет вышеизложенное занимает несколько секунд для запуска в диспетчере sql server, но занимает целую вечность при запуске из приложения, вызывающего хранимую процедуру с помощью sqladapter. Я читал, что это из-за суб-квайров. Просто интересно, есть ли лучшее решение?