我有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语句表示怀疑。