我很难找到我的select语句的解决方案。我有两张桌子:
CREATE TABLE Things
(
Id int,
type int
)
CREATE TABLE Relations
(
Id int,
IdParent int,
IdChild int
)
我需要根据给定的事物ID选择:
Type = -1
Type
匹配IdChild
匹配IdParent
的所有记录,其中Id
是给定Type
的行匹配类型。Id
的行-1
为CREATE TABLE Things (id int, type int)
CREATE TABLE Relations (id int, parent int, child int)
INSERT INTO Things VALUES (1, 1)
INSERT INTO Things VALUES (2, -1)
INSERT INTO Things VALUES (3, 3)
INSERT INTO Things VALUES (4, 3)
INSERT INTO Things VALUES (5, 2)
INSERT INTO Things VALUES (6, -1)
INSERT INTO Relations VALUES (1, 1, 2)
DECLARE @id int = 1
SELECT * FROM Things
JOIN Relations R ON R.parent = @id AND Type = R.child OR Type = -1
或表关系中不存在(作为IdParent),我需要选择所有来自事物的记录我遇到了上一个场景的问题,我尝试通过加入Relations表来做到这一点,但我不能提出满足所有场景,任何建议的条件?
更新
这就是我现在的表现。我需要解决表关系中不存在给定id的情况 - 然后我需要选择所有记录。
DECLARE @id int = 2
DECLARE @type int
SELECT @type = type FROM Things WHERE Id = @id
IF @type > -1
BEGIN
SELECT T.* FROM Things T
JOIN Relations R ON (R.parent = @id AND T.Type = R.child) OR T.Type = -1
END
ELSE
BEGIN
SELECT * FROM Things
END
所以我必须解决例如@id = 2的情况 - 我需要检索所有行(@id = 5相同,除非它出现在某个父列中的Relations中)。
更新2
我想出了类似的东西:
alpha.26
我非常确定这可以不同的方式完成,没有条件IF,优化。
答案 0 :(得分:0)
from Things
left outer join Relations
on Relations.IdParent = Things.Type
where Things.Type = -1 or Relations.IdParent is null