请帮助我编写此查询。我尝试了leftjoin,但无法正常工作。

我有两个表tdate和tollname。在tdate表中,我只有日期,例如一个月和第二个表的话费名称,我有带日期的话费名称。

我想查找表格路费名称中缺少的路费明智日期。

表名:tdate

Dates
1
2
3
4
...

30


收费名称

Dates   TollName
1       A
1       B
1       C
5       A
5       B
6       C
9       B
12      A
12      B
12      C
28      A
28      B
30      C

最佳答案

您可以只使用cross joinleft join(或等效地not exists / not in)。这将生成tollnamedate的所有组合,然后返回表中不存在的组合:

select d.date, t.tollname
from tdate d cross join
     (select distinct tollname from tollname) t
where not exists (select 1
                  from tollname t2
                  where d.date = t2.date and t.tollname = t2.tollname
                 );


如果您有一个单独的带有tollname的表,则可以使用该表代替子查询:

08-19 23:47