如何在2个表之间进行正确的JOIN逻辑

时间:2017-07-06 20:51:50

标签: sql join

相当新的SQL。

我有2个表,我需要在它们之间创建适当的连接。表:表1和表2。 表1包含以下列:域,实例,项目和上载。 表2包含以下列:域,实例,项目派生,上载和ID。

最终我想将Table2中的ID列引入Table1。但是,项目和项目派生并不完全匹配。相反,项目的价值将在项目推导中找到。

我的想法如下:

Table1.Domain=Table2.Domain
Table1.Instance=Table2.Domain
Table1.Upload=Table2.Upload

Table1.Project在Table2.Project Derivation

非常感谢任何帮助。

表1
Table1

表2
Table2

1 个答案:

答案 0 :(得分:0)

加入包括LIKE,以便进行比较

WHERE 'Cloud, Cloud - Config' LIKE '%Cloud - Con%'

查询:

SELECT *
FROM t1
JOIN t2 ON  t2.domain = t1.domain
        AND t2.instance = t1.instance
        AND t2.project_derivation like '%' || t1.project || '%';

但是,在查找名为'Better Plans''Bet'的项目时,您还会找到项目'Plan'的条目。这是因为你的桌面设计并不好。您没有正确使用关系数据库系统。如果您的查询对某个字符串的某些部分感兴趣,请分别存储这些部分。

在不了解您的大部分数据的情况下,我建议您使用project_derivation表,其中包含每个项目派生的一条记录以及相关项目。那么您将不再对子字符串感兴趣,而只是在此表中找到项目派生到项目的链接。

您的数据库设计可能存在更多缺陷。为什么两个表共享域和实例?项目是否仅在两者中具有意义(即,可以有一个项目审核Google.com/Dev和另一个同名的Ebay.com/Dev项目)?这可能没问题,你可以使用复合键,但也许你只是冗余地存储数据。