如何联接包括不存在的关系的SQL表

时间:2018-08-18 21:45:05

标签: sql sql-server database join rdbms

我有一个SQL Server连接问题。

我有3张桌子:

  • 一家商店的餐厅
  • 一个商店存储“餐馆属性”,例如“ Wifi,泳池,清洁,全包...”
  • 并存储餐厅与其所拥有属性之间的关系

最后,我想获得一个给定餐厅的结果表,其中应列出该餐厅的所有属性有没有。所以我也需要输出空值。

| id     name         |    | idRes   idProp |  | id      prop  |
+---------------------+    +----------------+  +---------------+
| 01     restaurant-01|    | 1        1     |  | 1       wifi  |
| 02     restaurant-02|    | 1        2     |  | 2       pool  |
                           | 2        2     |  | 3       24/7  |
                           | 2        2     |  | 4       clean |

现在我要输出ID为1的餐厅,其中包含它具有和不具有的所有属性。

| id     name           idRes   idProp    id   prop  |
+----------------------------------------------------+
| 1      restaurant-1     1       1        1   wifi  |
| 1      restaurant-1     1       2        2   pool  |
| 1      restaurant-1     NULL    NULL     3   24/7  |
| 1      restaurant-1     NULL    NULL     4   clean |

我希望这是可能的。预先感谢你们。你真棒。

1 个答案:

答案 0 :(得分:2)

您想知道与餐厅结合的所有属性是否存在关系。因此,将餐厅和房地产交叉连接,并外部连接关系:

select *
from restaurant r
cross join property p
left join relation rp on rp.idres = r.id and rp.idprop = p.id
where r.id = 1;