Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自两个不同表的SQL计数行,其中两个表都具有来自完全不同表的相同外键_Sql_Sql Server - Fatal编程技术网

来自两个不同表的SQL计数行,其中两个表都具有来自完全不同表的相同外键

来自两个不同表的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

我有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 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;