【发布时间】:2019-12-14 00:04:30
【问题描述】:
我不知道如何解释这个问题,所以让我尝试一个简化的例子。
我有两个表 Tickets 和 TicketEntities:
门票
tID | Customer | Val
----|----------|------
1 | Paul | 20
2 | Paul | 10
3 | Peter | 15
4 | Jane | 100
5 | Doe | 400
6 | John | 5
TicketEntities
EntityID | TicketID | Type
---------|-----------|--------
1 | 1 | 1
2 | 1 | 2
3 | 3 | 1
4 | 4 | 1
5 | 5 | 2
6 | 6 | 2
我想创建两个视图(如果可以的话,最好是这样):
-
[已解决] 查看 TicketEntity 类型 1 的票证。我的工作解决方案: 期望的结果:
tID | Customer | Val | EntityID | Type-------|-------------|-----|---------|------- 1 |保罗 | 20 | 1 | 1 3 |彼得 | 15 | 3 | 1 4 |简 | 100 | 4 | 1
注意:不是实际的查询/结果
SQL
SELECT * FROM Tickets AS t LEFT JOIN TicketEntities AS e ON t.ID=e.TicketID WHERE e.EntityTypeId = 1 -
仅查看 TicketEntity 类型为 2 而不是 1 的工单
期望的结果:
tID | Customer | Val | EntityID | Type ------|-------------|-----|----------|------- 5 | Doe | 400 | 5 | 2 6 | John | 5 | 6 | 2SQL
SELECT * FROM Tickets AS t LEFT JOIN TicketEntities AS e ON t.ID=e.TicketID WHERE e.EntityTypeId = 1 AND NOT EXISTS (SELECT * FROM dbo.Tickets AS t2 INNER JOIN dbo.TicketEntities AS e2 ON t2.Id=e2.Ticket_Id WHERE e2.EntityTypeId = 2) -
或者更优选地,单一视图:
期望的结果:
tID | Customer | Val | Entity_Type1 | Entity_Type2 -------|-------------|------|---------------|--------------- 1 | Paul | 20 | 1 | 2 2 | Paul | 10 | | 3 | Peter | 15 | 1 | 4 | Jane | 100 | 1 | 5 | Doe | 400 | | 2 6 | John | 5 | | 2SQL
我不知道该怎么做。自行加入?
最后,欢迎对问题进行改进。解决这个问题的最佳方法是什么?
【问题讨论】:
-
您的 LEFT JOIN 返回常规的 INNER JOIN 结果。将 e.EntityTypeId 条件从 WHERE 移动到 ON 以获得真正的 LEFT JOIN 结果。
标签: sql sql-server join left-join