【发布时间】:2016-02-16 14:07:40
【问题描述】:
假设您有以下两个 SQL Server 表:
t1:
|----------------------------------------------|
|name | day_planed | day_canceled | discription|
|----------------------------------------------|
|alpha| 2015-11-02 | 2015-11-01 | some |
|alpha| 2015-11-02 | 2015-10-30 | text |
|beta | 2015-11-02 | 2015-11-01 | here |
|----------------------------------------------|
t2:
|----------------------------------------------|
|name | day_planed | day_canceled | discription|
|----------------------------------------------|
|alpha| 2015-11-02 | 2015-10-30 | text |
|----------------------------------------------|
在 t1 的查询中,我现在想要除 t2 之外的所有条目。我已经尝试过类似于
SELECT *
FROM t1 AS A
LEFT JOIN t2 as B ON (A.name = B.name
AND A.day_planed = B.day_planed
AND A.day_canceled != B.day_canceled)
不幸的是,我不明白为什么它在 t1 的查询中不排除 t2 中的行。
第二个问题是,如果实际上有一种简单的方法可以通过仅返回具有最大描述的行来在没有 t2 的情况下查询 t1。我尝试在 SQL Server 中查看它,但只能找到第一个标识符,这不适用于这种“精彩”的 sql 实现......
【问题讨论】:
-
您的示例代码没有按照您的想法执行。我建议使用
NOT EXISTS。如果您返回并发表评论,我将发布答案(或其他人会)。你能用一个例子进一步解释“如果有一种简单的方法可以通过只返回具有最大描述的行来查询 t1 而没有 t2”吗? -
我感觉您不太了解 LEFT JOIN 的作用,因为在编写时查询没有机会工作。没有可能过滤掉行。 LEFT JOIN 从不删除行。
-
@Nick.McDermaid 我尝试使用 NOT EXISTS 问题是,我有一个值对(名称、day_planed、day_canceled),因此它不起作用。
-
@usr:我知道左连接基本上将表扩展到右视图第二个。如果我错了,请纠正我
-
@betlor5 有点,是的。
标签: sql sql-server multiple-entries