比多个select语句+ union all更好的解决方案?

时间:2017-08-24 07:47:37

标签: sql sql-server performance select union

我有2张桌子

/* Table One */
CREATE TABLE series (id INT IDENTITY(1,1)
                    ,username VARCHAR(20)
                    ,begindate DATETIME2(2))

ALTER TABLE series ADD CONSTRAINT PK_series
    PRIMARY KEY NONCLUSTERED (id DESC)

CREATE UNIQUE INDEX AK_series ON series
    (username, begindate DESC)

/* Table Two */
CREATE TABLE contact (male INT, female INT)

ALTER TABLE contact ADD CONSTRAINT FK_male
    FOREIGN KEY (male) REFERENCES series(id)

ALTER TABLE contact ADD CONSTRAINT FK_female
    FOREIGN KEY (female) REFERENCES series(id)

和许多用户(生产机器)。每个用户都可以开始新的系列并添加与其他用户/系列(与他当前的系列)的联系

鉴于:A系列ID

DECLARE @series INT = 14492 -- example

需要的3件事:(1)来自@series的所有数据(2)来自男性联系人的所有数据(3)来自女性联系人的所有数据
我目前的解决方案:

-- (1) first row
SELECT TOP 1 id, username, begindate
        FROM series
       WHERE id = @series
UNION ALL
-- (2) second row until NULL-row
SELECT id, username, begindate
  FROM series
 WHERE id = (SELECT TOP 1 male
                     FROM contact
                    WHERE female = @series)
UNION ALL
-- separator between (2) and (3)
SELECT NULL, NULL, NULL
UNION ALL
-- (3)
SELECT id, username, begindate
  FROM series
 WHERE id = (SELECT TOP 1 female
                     FROM contact
                    WHERE male = @series)

问题:有更好的解决方案吗? MS SQL Server 2016.我对联合多个select语句表示怀疑。

0 个答案:

没有答案