Sql 从两个表中选择数据

Sql 从两个表中选择数据,sql,sql-server-2008,Sql,Sql Server 2008,我有两张表Accountdetails和Accounts Accountdetails由列AD_ID、AD_名称、AD_账号组成 帐户由列A\u Name、A\u ackno、A\u ackdate组成 我的问题是,我想根据AD_AccNo和A_AccNo相等来选择数据 我尝试使用这个查询 select AD.AD_ID, a.A_Name, a.A_AccNo, a.A_AccDate from Accountdetails as AD, Accounts as a where AD.AD

我有两张表Accountdetails和Accounts

Accountdetails由列AD_ID、AD_名称、AD_账号组成 帐户由列A\u Name、A\u ackno、A\u ackdate组成 我的问题是,我想根据AD_AccNo和A_AccNo相等来选择数据

我尝试使用这个查询

select AD.AD_ID, a.A_Name, a.A_AccNo, a.A_AccDate 
from Accountdetails as AD, Accounts as a 
where AD.AD_AccNo = a.A_AccNo

有人能告诉我哪里出了问题吗?

这正是问题所在,你不是在做分组或类似的事情吗?

试试看

SELECT AD.AD_ID, a.A_Name, a.A_AccNo, a.A_AccDate from Accountdetails AD
LEFT JOIN Accounts a ON AD.AD_AccNo=a.A_AccNo
WHERE .... [your criteria here]

使用联接应该可以:

SELECT
    ad.AD_ID,
    a.A_Name,
    a.A_AccNo,
    a.A_AccDate
FROM
    Accountdetails ad
INNER JOIN
    Accounts a ON a.A_AccNo = ad.AccNo
WHERE
    [insert any conditional criteria here]    

表中必须有一些重复的帐号值

如果Accountdetails中有3行帐号为X,Accountdetails中有4行帐号为X,则联接将向结果集中添加12行

要确定这一点,请尝试以下操作

select COUNT(*), AD_AccNo from Accountdetails GROUP BY AD_AccNo HAVING COUNT(*) > 1 

select COUNT(*), A_AccNo from Accounts GROUP BY A_AccNo HAVING COUNT(*) > 1

解决这个问题的办法取决于他们为什么会在那里。你还需要加入其他专栏吗

虽然显式连接语法会更好,但这应该是可行的。您遇到了什么问题?预期的结果是什么?你所说的出错是什么意思?怎么会这样?如果在使用select语句时两个表都有722行,那么我得到的数据是4138行,您确定两个表都有722行吗?如果是这样,则必须有一些重复的A_AccNo值,因此您将获得一些小型交叉联接。我100%确定两个表都有722行。我也尝试了这个。如果两个表中都有722行,那么我得到的结果是4138行数据,其中我应该只得到722行数据如果得到的行比预期的多,这是一个很好的指示器,表明您应该通过其他列进行联接。我尝试在AccName和AccNo上联接它,包括在where子句中,假设每个表中有722行数据,它不起作用,根据上面的陈述,我应该只得到722行数据,但我得到4138行数据。您是否可以发布您正在使用的数据样本?根据评论,原始海报OP已经具有正确的语法。他们的表中有重复项,这导致了问题。所以这个问题不需要另一个答案,而你提供的答案似乎完全无关,也没有任何解释。更重要的是,它正是从
SELECT R.roleID, R.rolename, P.DisplayName, P.canRead, P.canWrite, P.canDelete
FROM role R
INNER JOIN (SELECT rp.roleId, rp.canDelete, rp.canRead, rp.canWrite, rp.moduleId,
            tm.DisplayName, tm.IsActive, tm.ParentId, tm.url
            FROM rolesPermissions rp
            INNER JOIN tbl_be_Modules tm ON rp.moduleId = tm.Id) P ON R.roleID = P.roleId
SELECT R.roleID, R.rolename, P.DisplayName, P.canRead, P.canWrite, P.canDelete
FROM role R
INNER JOIN (SELECT rp.roleId, rp.canDelete, rp.canRead, rp.canWrite, rp.moduleId,
            tm.DisplayName, tm.IsActive, tm.ParentId, tm.url
            FROM rolesPermissions rp
            INNER JOIN tbl_be_Modules tm ON rp.moduleId = tm.Id) P ON R.roleID = P.roleId
SELECT ad.AD_ID,
       ad.AD_Name,
       ad.AD_AccNo,
       a.A_Name,
       a.A_AccNo,
       a.A_AccDate 
FROM Accountdetails ad
INNER JOIN Accounts a
ON ad.AD_AccNo = a.A_AccNo