查询2个表并从表A中获取所有记录,并在第二个表中包含一个字段

时间:2019-02-19 19:04:17

标签: sql

表1

col1 col 2
A     aaa
B     bbb
C     ccc

表2

col1 col 2  col3
A     aaa    xx
B     bbb    yy
C     ccc    zz
D     ddd    hh
E     eee    mm

如何编写一个查询,其中我获得了所有table1数据,并且只有col3到表1的现有记录。table1只有50条记录,而Table2有100k。但是我只需要表1的所有50条记录,并且只需要通过加入将col3添加到记录中 表格1。 col1 = table2.col1

3 个答案:

答案 0 :(得分:3)

根据描述,我建议此查询:

SELECT
    t1.col1,
    t2.col2,
    t2.col3
FROM 
    table1 AS t1
INNER JOIN 
    table2 AS t2 ON (t2.col1 = t1.col1 AND t2.col2 = t1.col2)

SELECT子句确定结果集中将出现哪些列。您的描述在这里为我们提供了一些帮助。

对于联接,选择正确的联接类型对于您要进行的查询很重要。您的描述对此很有帮助:

  

如何编写查询,以获取表1的所有数据,而只有col3到表1的现有记录。

  • “获取所有表1”表示结果集应包括该表中的所有列。

    SELECT table1.col1, table1.col2 […]
    
  • “获取所有表1”表示表1是FROM子句中的主要来源。

    […] FROM table1 […]
    
  • “仅col3 [from table2]”表示结果集也应包括该列。

    SELECT […] table2.col3
    
  • “仅[...]到表1的现有记录”表示联接类型为INNER JOIN

    FROM table1
    INNER JOIN table2 […]
    
  • “仅col3到表1的现有记录”表示连接条件。

    FROM table1
    INNER JOIN table2 ON table2.[…] = table1.[…]
    

但是您没有确切指定什么条件告诉我们在表之间等效的记录。我们是否应该假设条件是所有具有相同名称的列都具有相同的值?

FROM table1
INNER JOIN table2 ON (table2.col1 = table1.col1 AND table2.col2 = table1.col2)

我们将多次使用这些表,因此在AS子句中设置简洁的FROM别名是一个好习惯。

答案 1 :(得分:1)

您想要INNER JOIN

SELECT t1.col1, t1.col2, t2.col3
FROM table1 t1 INNER JOIN
     table2 t2
     ON t2.col1 = t1.col1;

答案 2 :(得分:0)

尝试左加入:

    SELECT t1.col1, t1.col2, t2.col3
    FROM table1 t1 LEFT JOIN
         table2 t2
         ON t1.col1 = t2.col1 AND t1.col2 = t2.col2;