【发布时间】:2018-07-09 21:16:54
【问题描述】:
我有以下表结构:
Table1
--------------
Table1Id
Field1
Field2
Table2
------------
Table2Id
Table1Id
Field1
Field2
Table3
-----------
Table3Id
Table1Id
Field1
Field2
我需要能够选择Table1中的所有字段,Table2中的记录数,Table3中的记录数其中Table2中的记录数> Table3中的记录数
以下是给定数据的预期输出示例:
Table1 Data
-------------
1 Record1Field1 Record1Feild2
2 Record2Field1 Record2Feild2
3 Record3Field1 Record3Feild2
4 Record4Field1 Record4Feild2
Table2 Data
------------
1 1 Record1Field1 Record1Feild2
2 1 Record2Field1 Record2Feild2
3 2 Record3Field1 Record3Feild2
4 2 Record4Field1 Record4Feild2
5 2 Record5Field1 Record5Feild2
6 4 Record6Field1 Record6Feild2
7 4 Record6Field1 Record6Feild2
8 4 Record6Field1 Record6Feild2
Table3 Data
------------
1 2 Record1Field1 Record1Feild2
2 2 Record2Field1 Record2Feild2
3 3 Record3Field1 Record3Feild2
4 3 Record4Field1 Record4Feild2
5 3 Record5Field1 Record5Feild2
6 4 Record6Field1 Record6Feild2
期望的结果
Table1Id Field1 Field2 Table2Count Table3Count
1 Record1Field1 Record1Field2 2 0
2 Record2Field1 Recird2Field2 3 2
4 Record4Field1 Recird4Field2 3 1
表1中的注意记录3没有显示,因为表2中的记录数小于表3中的记录数。我能够使用与下面类似的非常丑陋的查询来完成这项工作,但我觉得使用连接有更好的方法。
SELECT
t1.Table1Id,
t1.Field1,
t1.Field2
(Select Count(Table2Id) From Table2 t2 Where t2.Table1Id = t1.Table1Id) as Table2Count,
(Select Count(Table3Id) From Table3 t3 Where t3.Table1Id = t1.Table1Id) as Table3Count,
From
Table1 t1
Where
(Select Count(Table2Id) From Table2 t2 Where t2.Table1Id = t1.Table1Id) > (Select Count(Table3Id) From Table3 t3 Where t3.Table1Id = t1.Table1Id)
【问题讨论】:
-
如果您可以发布表格和数据定义和/或 sqlfiddle,我们就更容易搞砸了
-
感谢您的评论。我什至不知道 sqlfiddle。非常感谢你的帮忙。这是使用 sqlfiddle 的示例和答案的链接。 sqlfiddle.com/#!9/8cd7fe/6
标签: sql sql-server join left-join