2017-02-18 40 views
0

我有三个表(这些是演示表而不是实际表)。 我可以使用JOIN从test1和test2获取数据,但在特定条件下无法从test3获取数据。SQL连接。从三个表中获取数据

在下面给出的表中ID3 = ID-ID2(两个ID使用 - 分开,并用作test3中的主键)。

当test1和test2中存在ID-ID2(如果存在)以及所有列(isShipped = default_value,当test3中不存在ID1-ID2时)时,我想获得is3的isShipped值。

enter image description here

+0

可以请你也加入foriegn键引用.....? –

+0

请求您添加样本输入数据和输出数据。它会真的帮助。 – Tajinder

+0

正在加入时,它将test1的ID与test2的ID相加。但是,test3中没有ID,因此您无法加入。 – 2017-02-18 14:39:06

回答

0

Test3的与任何表没有关系。您需要实现另一个独特的智能标识符,以便将您可推断的可识别三个表格之间的关系链接关联起来。

0

你想要的条件ID3 = ID - ID2是met.And你也想拥有全部来自TEST1和TEST2的属性,您可以使用full outer join并说出你的条件在where子句中,假设你的ID是整数,且有没有空。 N:B:这就是你在Oracle数据库中所做的。用MySQL的类似语义改变它,可能会在网上进行一些搜索。

SELECT c.isShipped 
FROM test1 a full outer join 
     test2 b, 
     test3 c 

WHERE c.ID3 = a.ID - b.ID2; 
+0

在mysql中没有完全加入 - 你有mysql替代吗?此外,id3似乎是以id-id2形式组成的复合键。 –

+0

那么我使用oracle sql.I相信那么OP需要用MySQL中的类似内容替换完整的外连接。 – 2017-02-18 15:43:01

+0

您在Oracle中使用隐式连接? –

0

根据图片我假设ID是VARCHARS?也许尝试是这样的:

SELECT t3.ID3, t3.isShipped 
FROM test1 t1 
JOIN test2 t2 ON t1.ID = t2.ID 
JOIN test3 t3 ON t1.ID + '-' + t2.ID2 = t3.ID3; 

SQL Fiddle Here

+0

您可以使用显式连接而不是拒绝隐式连接来做到这一点吗?另外+不是mysql中的连续快捷键。 –

+0

我更新以反映显式连接。基于SQL Fiddle,它看起来好像是+作为concat。 – sschmitz

0

对于MySQL尝试

select t1.*,t2.*,t3.isshipped 
from test1 t1 
join test2 t2 on t2.id = t1.id 
join test3 t3 on t3.id3 = concat(t2.id,'-',t2.id2) 
相关问题