Sql 从提供表E的表B中选择-从B中拉取E中存在和不存在的记录
我有两个表-E和B,它们通过列Breaktime链接。表B包含所有可用时间,并将其输入表E。如果表E未使用某个时间,则该时间的记录不再显示在表E中。我需要从E中选择*以获得已使用的时间,但也需要未使用的时间,这些时间不在E中,但在B中,并将其标记为“未使用”。查询有很多参数,下面是简短的版本:Sql 从提供表E的表B中选择-从B中拉取E中存在和不存在的记录,sql,sql-server,Sql,Sql Server,我有两个表-E和B,它们通过列Breaktime链接。表B包含所有可用时间,并将其输入表E。如果表E未使用某个时间,则该时间的记录不再显示在表E中。我需要从E中选择*以获得已使用的时间,但也需要未使用的时间,这些时间不在E中,但在B中,并将其标记为“未使用”。查询有很多参数,下面是简短的版本: SELECT e.BreakDate, b.Breaktime, (CASE WHEN...) to separate the times into categories FRO
SELECT
e.BreakDate, b.Breaktime,
(CASE WHEN...) to separate the times into categories
FROM
event e, break b, *several more tables*
WHERE
e.breakdate = b.breakdate
and e.breaktime = b.breaktime
and *linking additional tables*
我试过使用
WHERE NOT EXISTS (SELECT e.breaktime FROM E,B WHERE e.breaktime = b.breaktime)
IF EXISTS (
SELECT e.breaktime
FROM E,B
WHERE e.breaktime = b.breaktime
) THEN (
SELECT b.breaktime
FROM E,B
where NOT EXISTS (
SELECT *
FROM E,B
WHERE e.breaktime = b.breaktime
)
我试着用
WHERE NOT EXISTS (SELECT e.breaktime FROM E,B WHERE e.breaktime = b.breaktime)
IF EXISTS (
SELECT e.breaktime
FROM E,B
WHERE e.breaktime = b.breaktime
) THEN (
SELECT b.breaktime
FROM E,B
where NOT EXISTS (
SELECT *
FROM E,B
WHERE e.breaktime = b.breaktime
)
提前感谢。请考虑从
B
中进行如下选择:
SELECT ...
FROM B
LEFT JOIN E ...
B.Field1 B.Field2 E.Field1
============================================
1 A NULL
2 B Value 1
2 B Value 2
SELECT ...
FROM E
WHERE E.field IN (
SELECT e.field
FROM B
LEFT JOIN E ...
GROUP BY ....
)
通过执行左连接
,您将从B
获得所有行,并从E
获得匹配行。请记住,您将获得多行B
值,因为它们将存在于E
中的每个匹配行中。数据可能如下所示:
SELECT ...
FROM B
LEFT JOIN E ...
B.Field1 B.Field2 E.Field1
============================================
1 A NULL
2 B Value 1
2 B Value 2
SELECT ...
FROM E
WHERE E.field IN (
SELECT e.field
FROM B
LEFT JOIN E ...
GROUP BY ....
)
E.Field1
为NULL
的行表示E
中没有与该B
匹配的行。相比之下,请注意B
字段似乎是重复的。在某种程度上,他们是。但这是因为对于B
,有多个匹配E
现在,您可以很容易地将其抽象出来,即使只是在思想上,也可以对子查询进行一些分组和不同的操作,以确保您只从E
中得到您想要的。也许您可以进行如下的内部查询:
SELECT ...
FROM B
LEFT JOIN E ...
B.Field1 B.Field2 E.Field1
============================================
1 A NULL
2 B Value 1
2 B Value 2
SELECT ...
FROM E
WHERE E.field IN (
SELECT e.field
FROM B
LEFT JOIN E ...
GROUP BY ....
)
这只是一个例子。非常感谢您的帮助。稍微调整了一下,但奏效了@米歇尔·莱尔斯顿,我很高兴能帮上忙!