【问题标题】:query 2 tables and get all records from table A and include one field from 2nd查询 2 个表并从表 A 中获取所有记录,并从第 2 个表中包含一个字段
【发布时间】:2019-02-19 19:04:17
【问题描述】:

表 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

【问题讨论】:

  • 所以你确实知道加入。你有没有尝试过?
  • 请显示您已经编写的 SQL 查询不符合您的要求;这将使读者更清楚地了解您的想法。

标签: sql


【解决方案1】:

根据描述,我建议这个查询:

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 子句决定了哪些列将出现在结果集中。您的描述在这里为我们提供了一些帮助。

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

如何编写一个查询,其中我获取所有 table1 数据并且仅 col3 到表 1 的现有记录。

  • “get all of table1”意味着结果集应该包括该表中的所有列。

    SELECT table1.col1, table1.col2 […]
    
  • “get all of table1”意味着 table1 是FROM 子句中的主要来源。

    […] FROM table1 […]
    
  • “only col3 [from table2]”意味着结果集也应该包含该列。

    SELECT […] table2.col3
    
  • “仅 [...] 到 table1 的现有记录”意味着连接类型是 INNER JOIN

    FROM table1
    INNER JOIN table2 […]
    
  • “只有 col3 到 table1 的现有记录”意味着这是连接条件。

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

但是您没有具体说明什么条件告诉我们表之间哪些记录是等价的。我们是否应该假设条件是所有名称相同的列都具有相同的值?

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

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

【讨论】:

【解决方案2】:

你想要INNER JOIN

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

【讨论】:

  • 我收到了 50 多条记录。我只需要 50 条记录。我仍然尝试了不同的..
  • @pali101。 . .如果table2col3 中对于col1 有多个不同的值怎么办。
【解决方案3】:

尝试左连接:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多