Использование данных подзапроса для фильтрации основного запроса SQL для адаптеров таблиц - PullRequest
0 голосов
/ 16 ноября 2011

Это в основном вопрос SQL о том, как использовать данные из подвыбора для фильтрации вашего основного запроса.Я использую tableadapters, но вопрос в том, как сделать это в SQL без использования объединений.я использую tableadapters и ASP.NET, как описано в этой статье:

http://msdn.microsoft.com/en-us/library/aa581776.aspx

моя проблема заключается в том, как придерживаться идеи НЕ использовать соединения для моих tableadapters (причины обсуждаются встатья).У меня есть 2 таблицы: телефоны и телефонные ассоциации.таблица Phones содержит такие вещи, как phoneID, cellNumber, name и т. д. Таблица PhonesAssociations содержит информацию о том, какие телефоны (один ко многим) связаны с этим телефоном.он содержит такие вещи, как associationID, phoneID, addByID.я хочу создать запрос для адаптера таблицы, который возвращает данные телефонов (ячейка, идентификатор, имя), которые были добавлены одним идентификатором.

, если я не фильтрую данные и хочу вернуть все телефоныи связанные с ним данные просты:

SELECT 
phoneID, 
cellNumber,
providerID, 
password, 
nickname,  
added, 
(SELECT     
addedByID
FROM PhoneAssociations pa
WHERE p.phoneID = pa.addedByID) AS addedByID
FROM Phones AS p 

, но я не могу понять, как это сделать без использования объединений, это отфильтровать этот список по addByID, следующее не работает:

SELECT 
phoneID, 
cellNumber,
providerID, 
password, 
nickname,  
added, 
(SELECT     
addedByID
FROM PhoneAssociations pa
WHERE p.phoneID = pa.addedByID) AS addedByID
FROM Phones AS p 
WHERE addedBYID=1

это также не работает:

WHERE pa.addedBYID=1

это довольно просто с помощью объединений, но я не нахожу синтаксис для этого с помощью подвыборов.любой гуру SQL, который может указать мне в правильном направлении?Если вы посмотрите на статью, то увидите, что необходимо использовать подвыборы вместо соединений, чтобы адаптеры таблиц могли создавать ваши методы обновления, удаления и вставки.Спасибо!

записи, которые должны быть возвращены, должны сохранять свой первоначальный phoneID, мне нужен список всех телефонов (с их phoneID), которые были добавлены phoneID из 12 - contractorwolf 16 минут назад

я добавил это в комментариях, но, возможно, мне следует уточнить в самом вопросе:

, если я более ясен, и в таблице телефонов есть 3 записи с номерами телефонов 4,8 и 12и 2 записи в таблице PhoneAssociations с телефонными идентификаторами 4 и 8 и добавленными идентификаторами 12, которые мне нужно вернуть, - это 2 записи, имеющие телефонные идентификаторы 4 и 8, потому что они оба были добавлены с помощью 12

Phones
4
8
12

и

PhoneAssociations (addedByID is second column)
4, 12
8, 12

я пытаюсь ответить: какие идентификаторы телефонов были добавлены с помощью phoneID 12?ТНХ

Ответы [ 2 ]

1 голос
/ 16 ноября 2011
Select phoneID
    , cellNumber, providerID, password
    , nickname, added
    , phoneID As addedByID
From Phones AS p 
Where phoneID = 1
    And Exists  (
                Select 1
                From PhoneAssociations As PA1
                Where PA1.addedByID = P.phoneID
                )
0 голосов
/ 17 ноября 2011

@ Томас - Я немного изменил твой подход, чтобы дать мне данные, которые мне нужны.Последний запрос, который я использовал (в случае, если кто-то еще хочет решить проблему такого рода), находится здесь:

SELECT 
phoneID, 
cellNumber, 
providerID, 
password, 
fullName, 
nickname, 
(SELECT 
    providerName 
FROM dbo.CellProviders AS cp 
WHERE p.providerID=cp.providerID) AS providerName 
FROM dbo.Phones as p 
WHERE EXISTS (SELECT 1 FROM PhoneAssociations AS pa 
WHERE pa.phoneID = p.phoneID 
AND pa.addedByID = @addedByID) 

, который позволяет мне передать addedByID и вернуть телефоны, связанные с ним, с их правильнымиphoneID.Еще раз спасибо @Thomas за ваш ответ, он полностью преодолел пропасть для меня.Само утверждение гласит: «Дайте мне телефонные данные, где существует связь с PhoneAssociations с этими записями phoneIDs и AddedByID из 12 (или любым другим параметром @addedByID). Надеюсь, это поможет!

...