我敢肯定有一个简单的方法可以做到这一点,但是我什至无法想到如何准确地描述我想做的事情,因此我无法使用它。我的实际情况比这稍微复杂一些,但是一个非常基本的版本将有两个单独的表-一个显示购买公交车票的人的名字和日期,另一个显示在公交车上旅行的人的名字和日期。公交车,像这样
tableTicket tableTravel
custName ticketDate custName travelDate
-------- ---------- -------- ----------
tim 01-jul-15 tim 01-jul-15
tim 03-jul-15 tim 02-jul-15
anna 15-jul-15 tim 03-jul-15
anna 16-jul-15 anna 15-jul-15
anna 20-jul-15 anna 16-jul-15
emily 02-jul-15 rob 07-jul-15
rob 07-jul-15 rob 12-jul-15
rob 12-jul-15 rob 13-jul-15
我只想返回没有机票旅行的人的姓名和日期,而不是那些买票却没有旅行的人的姓名和日期。因此,我想在15年7月2日返回蒂姆的旅程,但在15年7月2日不是艾米莉的未使用票。
我遇到的问题是,我不能仅查找出现在ticketDate中没有出现的travelDate日期,因为那样它将使tim的旅程与emily的票相匹配。
我认为最好的方法是使用join,但是我不确定如何做。如果我加入custName,它将在tim买票并在15年7月1日旅行的行中创建一个行(这很好),但在他在15年7月1日购买车票并在2月7日旅行的行中创建一个行-15。
理想情况下,我想我想要一个这样的桌子,但我不知道如何到达那里
custName ticketDate travelDate
-------- ---------- --------
tim 01-jul-15 01-jul-15
tim NULL 02-jul-15
tim 03-jul-15 03-jul-15
anna 15-jul-15 15-jul-15
anna 16-jul-15 16-jul-15
anna 20-jul-15 NULL
emily 02-jul-15 NULL
rob 07-jul-15 07-jul-15
rob 12-jul-15 12-jul-15
rob NULL 13-jul-15
然后我可以选择ticketDate IS NULL
的所有行,这将为我提供蒂姆和罗伯没有机票所经过的旅程的详细信息。
很抱歉,如果我完全把错误的树种了。我敢肯定这确实很容易,但是我实在无法绕开它。
答案 0 :(得分:1)
您似乎想要FULL OUTER JOIN
:
select coalesce(tk.custName, tr.custName) as custName, tk.ticketDate, tr.travelDate
from tableticket tk full outer join
tabletravel tr
on tr.custname = tk.custname and tr.travelDate = tk.ticketDate;