我有三个表(这些是演示表而不是实际表)。 我可以使用JOIN从test1和test2获取数据,但在特定条件下无法从test3获取数据。SQL连接。从三个表中获取数据
在下面给出的表中ID3 = ID-ID2(两个ID使用 - 分开,并用作test3中的主键)。
当test1和test2中存在ID-ID2(如果存在)以及所有列(isShipped = default_value,当test3中不存在ID1-ID2时)时,我想获得is3的isShipped值。
我有三个表(这些是演示表而不是实际表)。 我可以使用JOIN从test1和test2获取数据,但在特定条件下无法从test3获取数据。SQL连接。从三个表中获取数据
在下面给出的表中ID3 = ID-ID2(两个ID使用 - 分开,并用作test3中的主键)。
当test1和test2中存在ID-ID2(如果存在)以及所有列(isShipped = default_value,当test3中不存在ID1-ID2时)时,我想获得is3的isShipped值。
Test3的与任何表没有关系。您需要实现另一个独特的智能标识符,以便将您可推断的可识别三个表格之间的关系链接关联起来。
你想要的条件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;
在mysql中没有完全加入 - 你有mysql替代吗?此外,id3似乎是以id-id2形式组成的复合键。 –
那么我使用oracle sql.I相信那么OP需要用MySQL中的类似内容替换完整的外连接。 – 2017-02-18 15:43:01
您在Oracle中使用隐式连接? –
根据图片我假设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;
您可以使用显式连接而不是拒绝隐式连接来做到这一点吗?另外+不是mysql中的连续快捷键。 –
我更新以反映显式连接。基于SQL Fiddle,它看起来好像是+作为concat。 – sschmitz
对于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)
可以请你也加入foriegn键引用.....? –
请求您添加样本输入数据和输出数据。它会真的帮助。 – Tajinder
正在加入时,它将test1的ID与test2的ID相加。但是,test3中没有ID,因此您无法加入。 – 2017-02-18 14:39:06