我通常使用SQL Server Express 2012和SS Management Studio和数据库,但对它们来说是新手。尽管花费了大量时间和精力,但使用特定的存储过程无法完全实现我的目标,并且在没有任何建议的情况下无法继续前进。
我想从三个相关的表A,B和C中检索数据。我想拥有TableA的所有行,而只有TableB和TableC的相关行(如果存在)。
我在StackOverflow上找到了该链接,该链接与我的问题最接近,我尝试过但未成功。代码段如下:
SELECT A.*
FROM
(TableA A LEFT JOIN TableB B ON A.id = B.a_id)
LEFT JOIN TableC C ON A.id = C.a_ID
现在,此代码具有与TableA(A.id)相关的TableB(B.a_id)和TableC(C.a_id)的相关“ ID”字段。
在我的情况下,TableA与TableB有关,而TableC与TableB有关。我要返回的是TableA的所有记录,而对于每个TableA记录,仅返回其他两个表中的几个“描述性”字段。我返回的记录超出了我的要求,因此如何将输出过滤为仅TableA中的记录?
谁能建议我该怎么做才能解决这个问题。
重要编辑
对不起,每个人-只是为了阅读您的出色回答来澄清一下。
我只想返回TableA中的所有行。我包括TableB和TableC只是为了为这些行中的每一行返回适当的列。
进一步的信息编辑
简单来说,我的情况与此类似:
TableA是员工表。它具有两列:EmployeeID,EmployeeName
TableB是一个部门表。它具有三列DeptID,DeptName,EmployeeID
TableC是公司表。它具有三列FirmID,FirmName,DeptID
我希望将所有雇员的列表(即TableA中的所有行)放入用户可以从中选择的列表框(在Excel VBA中)。在列表框中,我想向用户显示来自TableB和TableC的各个列:
EmployeeID,EmployeeName,FirmName,DeptName
我正在寻找实现这一目标的逻辑和查询代码
联接表时,不会从不同行中的不同表中获取记录,而是将所有表中的数据提取到同一结果行中。
只需在表中包括所需的字段即可SELECT
:
SELECT
A.*,
B.Something,
C.Something
FROM
TableA A
LEFT JOIN TableB B ON A.id = B.a_id
LEFT JOIN TableC C ON A.id = C.a_ID
请注意,您将始终获得TableB
和TableC
表的值,即结果始终为相同数量的列。如果没有来自TableB
或的相应记录TableC
,结果中的该字段将为null
。
(另请注意;对于实际的应用程序代码*
,在中使用SELECT
并不是一种好习惯。您应该在最终代码的A表中指定所需的字段。)
如果您有一个以上的记录TableB
或其中TableC
的每个记录TableA
,并且仍然只希望结果中有一个记录,则必须决定要处理来自TableB
或的多个值TableC
。
要处理,你会从数值组TableA
从和使用上聚集的价值观TableB
和TableC
。例如得到的总和Count
从字段TableA
和的平均值Price
从字段TableB
:
SELECT
A.Id,
A.Name,
SUM(B.Count) TotalCount,
AVG(C.Price) AveragePrice
FROM
TableA A
LEFT JOIN TableB B ON A.id = B.a_id
LEFT JOIN TableC C ON A.id = C.a_ID
GROUP BY
A.Id,
A.Name
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句