在单个表上使用左外连接比较来自第三个表MySQL的值

时间:2014-02-13 08:40:42

标签: mysql

我有一个状态表,其中包含以下行:

pk   Status

1    Employed

2    Unemployed

3    Retired

还有一个名为User的表,其中详细信息存储为

 pk_User  F_Status   M_Status

    1         1         2

    2         2         3

    3         3         1

其中F_statusM_Status的值被称为主表状态。 现在的问题是我需要显示值并使用左外连接但是我不能使用相同的表...

我的查询是:

select Status from User  
left outer join Status on
Status.pk=User.M_Status
where  pk_User=1;

这里我只能显示一行,而不能同时显示两行。请帮忙

答案应该是:

pk_User | F_Status  | M_Status
--------+-----------+------------
      1 | Employeed | Unemployeed

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT 
  u.pk_User,
  fs.status AS F_Status,
  ms.status AS M_Status
FROM user u
INNER JOIN status fs ON u.f_status = fs.pk
INNER JOIN status ms ON u.m_status = ms.pk

这会给你:

╔══════════╦═════════════╦════════════╗
║ PK_USER  ║  F_STATUS   ║  M_STATUS  ║
╠══════════╬═════════════╬════════════╣
║       3  ║ Retired     ║ Employed   ║
║       1  ║ Employed    ║ Unemployed ║ <-------
║       2  ║ Unemployed  ║ Retired    ║
╚══════════╩═════════════╩════════════╝

您可以添加WHERE子句来过滤PK_User或任何其他列。

答案 1 :(得分:1)

您似乎正在尝试对同一个表格m_statusf_status进行多次加入。

SELECT fs.f_status, ms.m_status FROM user u
INNER JOIN status fs ON u.f_status = fs.status
INNER JOIN status ms ON u.m_status = ms.status
WHERE u.pk_user = 1;