使用子查询数据筛选TableAdapters的主SQL查询

使用子查询数据筛选TableAdapters的主SQL查询,sql,asp.net,tableadapter,Sql,Asp.net,Tableadapter,这基本上是一个SQL问题,关于如何使用子选择中的数据来过滤主查询。我正在使用tableadapters,但问题是如何在不使用联接的情况下在SQL中实现这一点。我正在使用tableadapters和ASP.NET,如本文所述: 我的问题是如何坚持在我的TableAdapter中不使用联接的想法(原因将在本文中讨论)。我有两张桌子:电话和电话协会。Phones表包含phoneID、手机号码、姓名等内容。PhonesAssociations表包含与该手机关联的手机(一对多)的相关信息。它包含诸如as

这基本上是一个SQL问题,关于如何使用子选择中的数据来过滤主查询。我正在使用tableadapters,但问题是如何在不使用联接的情况下在SQL中实现这一点。我正在使用tableadapters和ASP.NET,如本文所述:

我的问题是如何坚持在我的TableAdapter中不使用联接的想法(原因将在本文中讨论)。我有两张桌子:电话和电话协会。Phones表包含phoneID、手机号码、姓名等内容。PhonesAssociations表包含与该手机关联的手机(一对多)的相关信息。它包含诸如associationID、phoneID、addedByID之类的内容。我想为tableadapter创建一个查询,返回由单个ID添加的电话数据(手机、ID、姓名)

如果我没有过滤数据,并且希望返回所有电话和相关数据,那么sql很简单:

SELECT 
phoneID, 
cellNumber,
providerID, 
password, 
nickname,  
added, 
(SELECT     
addedByID
FROM PhoneAssociations pa
WHERE p.phoneID = pa.addedByID) AS addedByID
FROM Phones AS p 
但是,如果不使用联接,我似乎不知道如何通过addedByID过滤该列表,以下操作不起作用:

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
这也不起作用:

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
使用连接非常简单,但我没有找到使用subselect进行连接的语法。有没有SQL专家能为我指明正确的方向?如果您阅读本文,您将看到需要使用subselect而不是join,以便tableadapters可以创建更新、删除和插入方法。谢谢


需要返回的记录应保留其原始phoneID,我需要一份12–contractorwolf 16分钟前phoneID添加的所有电话(及其phoneID)的列表

我在评论中补充了这一点,但也许我应该在问题本身中澄清:


如果我更清楚,phones表中有3条记录的phoneId为4,8和12,PhoneAssociations表中有2条记录的phoneId为4和8,addedByID为12,那么我需要返回的是2条记录的phoneId为4和8,因为它们都是由12相加的

Phones
4
8
12


我想回答的是:phoneID 12添加了哪些phoneID?thx

@Thomas-我对你的方法做了一些修改,以提供我需要的数据。
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
                )
我使用的最后一个查询(以防其他人希望解决此类问题)如下所示:

这允许我传递一个
addedByID
,并返回与其关联的电话及其正确的
phoneID
。 再次感谢@Thomas的回答,这完全弥补了我的差距。
语句本身说“如果电话数据与
PhoneAssociations
存在关系,则将其与这些记录
phoneIDs
和12的
AddedByID
关联起来(或@AddedByID参数需要的任何内容)。希望能有所帮助!

嗯,如果我在这里出错,请纠正我,但这似乎会返回一个包含相关addedByID的电话列表,但不会过滤到特定addedByID,我需要知道与特定addedByID关联的电话ID@contractorwolf-它是通过与
PhoneA匹配的过滤器
phoneID=1
实现的Associations.addedByID
。需要返回的记录应保留其原始phoneID,我需要所有电话的列表(及其phoneID)如果我更清楚的话,phoneID加上了12,phoneID为4、8和12的phones表中有3条记录,phoneID为4、8和12的PhoneAssociations表中有2条记录,phoneID为4和8,addedByID为12,我需要返回的是2条phoneID为4和8的记录,因为它们都是12加上去的答案是:phoneID 12添加了哪些phoneID?