我使用MySQL 5.7并有三个表。我只是展示每个相关字段来解释我的问题。
_context.Wallets.Attach(model.wallet);
我想做以下事情:
TourHdr.id
TourHdr.paxnos
TourDet.id
TourDet.tourhdrid
TourDet.tourdate
TourDet.paxnos
DietAnal.ddtourid
DietAnal.ddtourtype
即。查询中与DietAnal的连接要么基于TourHdr信息,要么基于TourDet信息,具体取决于paxnos在TourHdr和TourDet中是否相等。
我已经阅读了Stack Overflow和MySQL论坛上的许多条件连接问题,但还没有真正设法让它发挥作用。我在联接中尝试了IF表达式,Case表达式和AND / OR,但我没有设法得到正确的结果。
要理解的主要事情是DietAnal中总有一组与TourHdr.id匹配的记录但偶尔会有当paxnos不同时直接连接到TourDet.id的记录。
答案 0 :(得分:0)
我得到了以下工作:
Select 'various' from TourDet
Inner join TourHdr on TourDet.tourhdrid = TourHdr.id
Inner join DietAnal on DietAnal.ddtourid = TourDet.id and DietAnal.ddtourtype = 'TourDet'
OR
DietAnal.ddtourid = TourHdr.id and DietAnal.ddtourtype = 'TourHdr'
那是唯一一个没有给我任何语法错误的人,但是当DietAnal表中同时存在一组TourDet条目时,我得到了这些并且我也设置了TourHdr。
答案结果是在联接中还包括paxnos需要相同或不同的条件。这是我不理解的一点。我一直认为连接只能包含要连接的表中的字段,但它可以包含查询中可访问的任何字段。
所以我最后的询问是:
Select 'various' from TourDet
Inner join TourHdr on TourDet.tourhdrid = TourHdr.id
Inner join DietAnal on DietAnal.ddtourid = TourDet.id and DietAnal.ddtourtype = 'TourDet' and TourHdr.paxnos != TourDet.paxnos
OR
DietAnal.ddtourid = TourHdr.id and DietAnal.ddtourtype = 'TourHdr' and TourHdr.paxnos = TourDet.paxnos
对于经验丰富的MySQL用户来说,这看起来似乎很简单,但我希望那些经验不足的人能够从我不得不花时间去工作中受益。