2014-12-04 23 views
0

相同的外鍵我有3個表是這樣的:SQL count行,兩者有完全不同於表

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) 
) 

我想從名稱=一些噓聲和酒吧桌數。這是我到目前爲止的查詢。

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; 

這是可以優化嗎?

回答

1

就性能而言,您的查詢可能有最佳計劃。您可以將它們合併爲一個查詢:

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; 
相關問題