MySQL - 在右表中获取每组左表中的所有行

时间:2015-10-30 18:30:50

标签: mysql

我需要在表B中显示表A中每个user_id的所有记录,即使不匹配也是如此。我尝试过LEFT JOIN和GROUP-ing但没有达到我预期的结果。我的SQL技巧也不好,所以需要帮助。

这是我的表数据:

Table A : gateways
=========================
| ID | Gateway          |
=========================
|  1 | Paypal           |
|  2 | Webpay           |
|  3 | Stripe           |
=========================

Table B : gateway_user
==================================
|  GatewayID |  UserID  | Active |
==================================
|     1      |     1    |   Y    |
|     1      |     2    |   Y    |   
|     1      |     3    |   N    |
|     2      |     1    |   Y    |
|     2      |     2    |   N    |
|     3      |     1    |   Y    |
==================================

我期望的结果是在右表中看到每个user_id左表的所有结果,即使它没有存在于右表中。

==================================
|  GatewayID |  UserID  | Active |
==================================
|     1      |     1    |   Y    |
|     1      |     2    |   Y    |
|     1      |     3    |   N    |
|     2      |     1    |   Y    |
|     2      |     2    |   N    |
|     2      |     3    |  null  |
|     3      |     1    |   Y    |
|     3      |     2    |  null  |
|     3      |     3    |  null  |
==================================

谢谢。

1 个答案:

答案 0 :(得分:2)

您必须创建包含所有userId列表的人工表:

SELECT gw.id, ua.userId, gu.active 
FROM gateways gw 
JOIN (SELECT DISTINCT userId 
      FROM gateway_user) ua 
LEFT JOIN gateway_user gu 
ON gu.userId = ua.userId AND gu.gatewayId = gw.gatewayId