【发布时间】:2015-10-16 10:17:54
【问题描述】:
抱歉,我不太确定这个标题的标题是什么,我认为它比听起来要复杂一些。此问题适用于 Microsoft SQL Server 2008。
我有两个如下所示的表:
Logging.Logs:
+---------+------------+--------------+
| LogID | LogEntry | LogTimeUtc |
+---------+------------+--------------+
| 1 | Foo | 2015-10-16..|
| 2 | Bar | 2015-10-16..|
| ... | ... | ... |
Logging.LogAttributes:
+---------+------------------+----------------+
| LogID | LogAttributeID | LogAttribute |
+---------+------------------+----------------+
| 1 | 1 | FooAttribute |
| 1 | 2 | BarAttribute |
| 1 | 3 | BazAttribute |
| 2 | 1 | FooAttribute |
| 2 | 2 | BazAttribute |
| ... | ... | ... |
我想要来自 Logging.Logs 的所有 LogID,这些 LogID 在 Logging.LogAttributes 中没有对应的条目,LogAttribute 字段以“Bar”开头。
在上面的表格中,我只会得到 LogID 2,因为 LogID 1 在 LogAttributes 中有一行,LogAttribute 字段中有“BarAttribute”。
我从左连接开始,但它返回 1 和 2,因为 LogAttributes 中有 LogID 为 1 且 LogAttribute 不以 'Bar' 开头的条目
SELECT *
FROM Logging.Logs l
LEFT JOIN Logging.LogAttributes la
ON ( l.LogID = la.LogID AND la.LogAttribute NOT LIKE 'Bar%' )
【问题讨论】:
-
LogAttributes.LogID 可以为空吗?
标签: sql sql-server sql-server-2008 join