【问题标题】:Join 2 Tables and display everything加入 2 个表格并显示所有内容
【发布时间】:2009-12-25 20:52:25
【问题描述】:

我有 2 个简单的表格:

表一:

id | txt
---+----
0  | aaa
1  | bbb
2  | ccc

表 b:

id | tel
---+----
0  | 000
2  | 111

我正在尝试像这样加入 2 个表:

SELECT a.*,b.* 
  FROM a,b 
 WHERE a.id=b.id

它可以工作,但是,如果“b”表中没有条目,它将不会显示任何内容。

sql 显示的内容是这样的:

id | txt | tel
---+-----+----
0  | aaa | 000
2  | ccc | 111

我还想列出“空”行a.id=1:

id | txt | tel
---+-----+-----
1  | bbb | NULL

有什么想法吗?谢谢! (SQL 用于 MS Access / oledb)

【问题讨论】:

  • @Asaph:如果你想美化它,添加一些灯光和金属丝。嗯? =)

标签: sql mysql ms-access


【解决方案1】:

您想要一个left outer join(或者一个完整的外连接,如果您还想要在a 表中没有条目的行)。

SELECT a.*,b.* FROM a LEFT OUTER JOIN b ON a.id=b.id

根据系统,LEFT JOIN 语法也可以工作。

【讨论】:

    【解决方案2】:

    在 MSAccess 查询设计器中,右键单击两个表之间的关系连接,然后编辑其属性。将其修改为“显示表 a 中的所有记录”。

    【讨论】:

      【解决方案3】:

      这个:

      SELECT a.*,b.* 
        FROM a, b 
       WHERE a.id = b.id
      

      ...是 ANSI-89 内连接语法,我强烈建议改用 ANSI-92 语法:

      SELECT a.*,
             b.*
        FROM TABLE_A a
        JOIN TABLE_B b ON b.id = a.id
      

      ...主要是因为用于左连接表的 ANSI-88 语法并未在各种数据库上一致实现。这将返回您期望的结果:

         SELECT a.id,
                a.txt,
                b.tel
           FROM TABLE_A a
      LEFT JOIN TABLE_B b ON b.id = a.id
      

      在本例中,LEFT JOIN 表示您将从 TABLE_A 中获取所有记录,并且当 TABLE_B 中存在匹配记录(基于ON 条件)时,将显示该值。否则,TABLE_B 列引用将返回 NULL 值。

      有关 JOIN 的更多信息,请参阅this page for a great pictorial demonstration of what each one represents and how they compare

      【讨论】:

      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多