代码之家  ›  专栏  ›  技术社区  ›  slipperypete

如何在两个表上进行连接,但只返回一个表的数据?

  •  1
  • slipperypete  · 技术社区  · 7 年前

    我不确定这是否可行。但是,是否可以对两个表进行联接,但只返回其中一个表的数据。我想根据一个条件连接两个表,但我只需要其中一个表的数据。SQL是否可以做到这一点,如果可以,如何做到?阅读完文档后,似乎在进行连接时,您会得到两个表的数据。谢谢你的帮助!

    4 回复  |  直到 7 年前
        1
  •  3
  •   dani herrera    7 年前

    您可以从这两个表中获取数据,因为联接基于 “” Cartesian Product “” + “” Selection “” .但加入后,你可以 “” Projection “” 具有所需的列。

    SQL对此有一个简单的语法:

    Select t1.*               --taking data just from one table
    from one_table t1
    inner join other_table t2
    on t1.pk = t2.fk
    

    您可以通过别名选择表: t1.* t2.* .符号 * 表示“所有字段”。

    您还可以包括 where 条款 order by 或其他连接类型,如 outer join cross join

        2
  •  1
  •   O. Jones    7 年前

    典型的SQL查询有多个子句。

    这个 SELECT 子句提到了结果集中需要的列。

    这个 FROM 条款,包括 JOIN 操作,提到要从中检索这些列的表。

    这个 WHERE 子句筛选结果集。

    这个 ORDER BY 子句指定结果集中的行的显示顺序。

    还有其他一些条款,如 GROUP BY LIMIT .你可以看看这些。

    要执行您的要求,请选择所需的列,然后提及所需的表。像这样的。

       SELECT t1.id, t1.name, t1.address
         FROM t1
         JOIN t2 ON t2.t1_id = t1.id
    

    这将为您提供来自 t1 来自匹配的行 t2

    Pro提示: 避免使用 SELECT * 。请提及所需的列。

        3
  •  1
  •   Gordon Linoff    7 年前

    这通常可以使用 exists (或 in )如果您愿意:

    select t1.*
    from table1 t1
    where exists (select 1 from table2 t2 on t2.x = t1.y);
    

    虽然您可以使用 join ,它会有使结果集中的行数相乘的风险—如果中存在重复的匹配项 table2 .不存在使用此类副本的危险 存在 (或 在里面 )我也觉得逻辑更自然。

        4
  •  0
  •   hang gao    7 年前

    如果你加入两个表。

    您可以使用 选择 选择所需数据

    如果要获取数据表,可以这样做,只需选择一个表日期

    SELECT b.title
    FROM blog b
    JOIN type t ON b.type_id=t.id;
    

    如果要从两个表中获取数据,可以选择两个表日期。

    SELECT b.title,t.type_name
    FROM blog b
    JOIN type t ON b.type_id=t.id;