来自两个不同表的SQL计数行,其中两个表都具有来自完全不同表的相同外键
我有3张这样的桌子:来自两个不同表的SQL计数行,其中两个表都具有来自完全不同表的相同外键,sql,sql-server,Sql,Sql Server,我有3张这样的桌子: CREATE TABLE Main (MainId INT PRIMARY KEY IDENTITY, Name nvarchar(50)) CREATE TABLE Foo (FooId INT PRIMARY KEY IDENTITY, MainId int, FooAnotherColumn int, FOREIGN KEY (MainId) REFERENCES Main(MainId) ) CREATE TABLE Bar (BarId INT PRIMARY
CREATE TABLE Main
(MainId INT PRIMARY KEY IDENTITY,
Name nvarchar(50))
CREATE TABLE Foo
(FooId INT PRIMARY KEY IDENTITY,
MainId int,
FooAnotherColumn int,
FOREIGN KEY (MainId) REFERENCES Main(MainId)
)
CREATE TABLE Bar
(BarId INT PRIMARY KEY IDENTITY,
MainId INT,
BarAnotherColumn INT,
FOREIGN KEY (MainId) REFERENCES Main(MainId)
)
我想从boo和bar表中计算Name=something。这是我到目前为止提出的问题
DECLARE @fooCount int, @barCount int;
SELECT
@fooCount = (SELECT
(COUNT(*))
FROM Foo o
INNER JOIN Main s
ON o.MainId = s.MainId
WHERE s.Name = 'something')
SELECT
@barCount = (SELECT
(COUNT(*))
FROM Bar o
INNER JOIN Main s
ON o.MainId = s.MainId
WHERE s.Name = 'something')
SELECT
@fooCount + @barCount;
这是可以优化的吗?就性能而言,您的查询可能有最好的计划。您可以将它们组合到单个查询中:
SELECT f.foocount + b.barcount,
FROM (SELECT COUNT(*) as foocount,
FROM Foo o INNER JOIN
Main s
ON o.MainId = s.MainId
WHERE s.Name = 'something'
) f CROSS JOIN
(SELECT COUNT(*) as barcount
FROM Bar o INNER JOIN
Main s
ON o.MainId = s.MainId
WHERE s.Name = 'something'
) b;