同时加入和限制不同的列

时间:2016-10-11 12:23:01

标签: mysql sql

我们可以使用连接操作并同时对不同的列进行限制吗?我想基于另一个数据库中的三个表(在示例中称为DB2)在数据库(在示例中称为DB1)上创建一个表,其中新表中的某些列在其他列中有特定条目时填充了entrys (在示例中,表2中“attributeID”列中的“4”表示“gender”列中的条目,“5”表示“age”列中的条目;表3中“attributeID”列中的“7”表示“街道”栏中的条目。 - >如果是,那怎么办?

两个数据库都在同一台服务器上,而DBMS是相同的。 ID1和ID2基于DB2中的table1; ID2,attributeID和值(根据attributeID中的条目写入性别或年龄)基于DB2中的table2; ID2 attributeID和value(当attributeID中的条目为7时写入street的位置)基于DB2中的table3。

示例数据:

表1:

ID1      ID2
1        2
2        4
3        5

表2:

ID2    attributeID    value
2      3              Kahtrin ->an example entry which is not relevant
2      4              miss
2      5              22
4      1              active  ->an example entry which is not relevant
4      4              EMPTY/NULL
4      5              47
5      4              mr
5      5              34
5      6              Hindu ->an example entry which is not relevant

表3

 ID2    attributeID    value
2      5              20% ->an example entry which is not relevant
2      7              middlestreet 40
4      4              chinese ->an example entry which is not relevant
4      7              churchstreet 12
5      3              3Euro
5      7              EMPTY/NULL

预期结果

表4:

ID1    ID2    gender    age     street
1      2      miss      22      middlestreet 40
2      4                47      churchstreet 12
3      5      mr        34

这是我尝试过的(从我使用DB1的观点来看):

INSERT INTO table4 
        (id1, 
         id2, 
         gender,
         age,
         street) 
SELECT t1.id1, 
   t1.id2, 
   t2.value
   t2.value
   t3.value
FROM db1.table1 t1 
   LEFT JOIN db1.table2 t2 
          ON t1.ID2=t2.ID2 
             AND value = 4 OR 5
   LEFT JOIN db1.table3 t3 
          ON t1.ID2=t3.ID2 
             AND value = 7;

1 个答案:

答案 0 :(得分:1)

您选择错误(不产生预期结果)您应该使用别名
来使用表t2两次 你应该明确地将表t3分配给值

SELECT t1.id1, 
   t1.id2, 
   t2.value
   t4.value
   t3.value
FROM db1.table1 t1 
   LEFT JOIN db1.table2 t2 
          ON t1.ID2=t2.ID2 
             AND value = 4 
   LEFT JOIN db1.table2 t4 
          ON t1.ID2=t4.ID2 
             AND value = 5             
   LEFT JOIN db1.table3 t3 
          ON t1.ID2=t3.ID2 
             AND t3.value = 7;