【问题标题】:JOIN the table if records exist如果记录存在则加入表
【发布时间】:2016-07-12 19:55:07
【问题描述】:

如果我只想在第二张表上存在记录时才进行 INNER JOIN 是否有可能,如果不存在则不加入?

这是我的桌子

用户

+--------+--------------+
|   id   |     name     | 
+--------+--------------+
|   1    | John         |
+--------+--------------+
|   2    | Josh         | 
+--------+--------------+

房子桌子

+--------+-------------+--------------+ 
|   id   |   owner_id  |   house_no   |
+--------+-------------+--------------+
|   1    |      1      |      991     | 
+--------+-------------+--------------+

这是我的 INNER JOIN 查询

SELECT h.owner_id, u.name, h.house_no FROM user u
INNER JOIN house h on u.id = h.owner_id 
WHERE u.id = :id

如果id = 1会返回这个结果

+--------+--------------+--------------+ 
|   id   |     name     |   house_no   |
+--------+--------------+--------------+
|   1    | John         |      991     | 
+--------+--------------+--------------+

但如果我使用id = 2 运行,则不会返回任何结果。

我现在想要做的是即使在表屋中不存在id = 2 的数据时它仍然返回结果

【问题讨论】:

  • 这正是inner join 的工作原理。仅匹配行。
  • 哦,我明白了。我不知道。谢谢!

标签: sql sql-server database inner-join


【解决方案1】:

改用左外连接。

SELECT u.id, u.name, h.house_no FROM user u
LEFT OUTER JOIN house h on u.id = h.owner_id 
WHERE u.id = :id

结果记录将是:

+--------+--------------+--------------+ 
|   id   |     name     |   house_no   |
+--------+--------------+--------------+
|   2    |     Josh     |     null     | 
+--------+--------------+--------------+

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
相关资源
最近更新 更多