加入两个没有保证ID匹配的MySQL表很困难

时间:2015-08-21 15:45:24

标签: php mysql

我有一个复杂的情况,我一直试图弄清楚加入两个表。基本结构是我有表S,其中包含name,num,box,以及包含相同4个字段,name,num,box和user的用户和表D

我可以轻松地匹配盒子和用户,但它还不够。我还需要在可能的情况下匹配名称。

取值

Dave,1234,3,jon
Scot,1111,3,jon
Bill,4389,3,abe

d

Mark,3333,3,jon
Dave,3355,3,jon
Lime,9832,6,jon

我需要的结果是什么

Dave,1234,3355,3,jon
Scot,1111,null,3,jon
Mark,null,3333,3,jon

我尝试了几种不同的连接类型,但问题是这些表没有排列的ID,并且名称可能存在于两者中但不是必需的。如果它确实存在,我想要两者的数字,但只有一个名称。

3 个答案:

答案 0 :(得分:0)

首先,我想说DB设计需要工作。

但是如果你无法改变设计,我认为nave变量的完整外连接将为你提供所需的东西。

答案 1 :(得分:0)

此解决方案适用于您提供的数据。我不确定数据中是否还有更多内容:。

select s.name, s.num, d.num, s.box, s.user from s, d where s.name = d.name
union
select s.name, s.num, "null", s.box, s.user from s where s.name not in (select s.name from s, d where s.name = d.name)
union 
select d.name, "null",d.num, d.box, d.user from d where d.name not in (select s.name from s, d where s.name = d.name)

点击Demo此处。

答案 2 :(得分:0)

从其他来源获得一些帮助,我能够扩展Prera​​k提供的答案,并使用包含工会的子查询提出以下内容

select * from (
select s.name, s.num as sNum, d.num as dNum, s.board, s.username from s, d where s.name = d.name
union
select s.name, s.num as sNum, "null", s.board, s.username from s where s.name not in (select s.name from s, d where s.name = d.name)
union
select d.name, "null",d.num as dNum, d.board, d.username from d where d.name not in (select s.name from s, d where s.name = d.name)
) as dataTab
where user = 'jon' and box = 3