Mysql 在同一个表中正确执行外部联接

Mysql 在同一个表中正确执行外部联接,mysql,join,inner-join,outer-join,Mysql,Join,Inner Join,Outer Join,我有以下疑问 SELECT DISTINCT P.CUSTUM_ID, P.STATUS, M.DATE_RATE, PP.PRICE_USR, PP.DISC FROM MBR_INFO AS M INNER JOIN PARENT_INFO AS P on M.CUSTUM_ID = P.CUSTUM_ID INNER JOIN PRICE_PARENT PP on P.CUSTUM_ID = PP.CUSTUM_ID WHERE M.DATE_RATE > (getDate(

我有以下疑问

SELECT DISTINCT P.CUSTUM_ID, P.STATUS, M.DATE_RATE, PP.PRICE_USR, PP.DISC
FROM MBR_INFO AS M
INNER JOIN PARENT_INFO AS P
  on M.CUSTUM_ID = P.CUSTUM_ID
INNER JOIN PRICE_PARENT PP
  on P.CUSTUM_ID = PP.CUSTUM_ID
WHERE M.DATE_RATE > (getDate())
  and P.USER_FLAG = 'Y'
order by M.DATE_RATE;
这将产生以下输出

|   CUSTUM_ID   |   STATUS  |   DATE_RATE   |   STATU   |   ORIG_P  |   PRICE_U |   DISC
---------------------------------------------------------------------------------------------
|   12345678    |   USER    |   2015-05-19  |   NULL    |   0.00    |   2990.00 |   0.00
|   12345678    |   NONUSR  |   2015-05-19  |   NULL    |   0.00    |   5980.00 |   0.00
|   56789012    |   USER    |   2015-08-06  |   NULL    |   0.00    |   0.00    |   0.00
|   56789012    |   NONUSR  |   2015-08-06  |   NULL    |   0.00    |   400.00  |   0.00
|   35789651    |   USER    |   2015-12-23  |   NULL    |   0.00    |   1990.00 |   0.00
|   35789651    |   NONUSR  |   2015-12-23  |   NULL    |   0.00    |   3980.00 |   0.00
|   25879460    |   USER    |   2016-01-01  |   NULL    |   0.00    |   2000.00 |   0.00
|   25879460    |   NONUSR  |   2016-01-11  |   NULL    |   0.00    |   4000.00 |   0.00
正如你所看到的,我们有两种价格,用户和非用户。我想更改我的查询,使其在同一行中同时显示用户和非用户价格,从而删除用户状态,现在将其显示为用户和普通公众的价格,类似这样

|   CUSTUM_ID   |   DATE_RATE   |   STATU   |   ORIG_P  |   PRICEU  |   PRICENU |   DISC
---------------------------------------------------------------------------------------------
|   12345678    |   2015-05-19  |   NULL    |   0.00    |   2990.00 |   5980.00 |   0.00
|   56789012    |   2015-08-06  |   NULL    |   0.00    |   0.00    |   400.00  |   0.00
|   35789651    |   2015-12-23  |   NULL    |   0.00    |   1990.00 |   3980.00 |   0.00
|   25879460    |   2016-01-01  |   NULL    |   0.00    |   2000.00 |   4000.00 |   0.00
我一直在阅读,最好的建议是使用
完全外部联接
,但到目前为止,我得到的输入与使用内部联接相同。如何更改查询以显示所需数据?

您可以使用条件聚合:

如果每个组都有单独的
M.DATE
值,则您可以从
group BY
子句中删除
M.DATE
字段,并使用聚合函数将该字段包括在
SELECT
中,如
MIN(M.DATE)
您可以使用条件聚合:


如果每个组都有单独的
M.DATE
值,那么您可以从
group BY
子句中删除
M.DATE
字段,并使用聚合函数将该字段包括在
SELECT
中,例如
MIN(M.DATE)
您可以将该表与其自身连接起来

这只是演示如何将两行转换为一行的部分。你还需要其他的桌子

 SELECT P_USER.CUSTUM_ID, 
        P_USER.STATUS,    -- I know is user
        P_NOUSER.STATUS   -- I know is not user
 FROM PARENT_INFO as P_USER
 JOIN PARENT_INFO as P_NOUSER
   ON P_USER.CUSTUM_ID = P_NOUSER.CUSTUM_ID
WHERE
     P_USER.STATUS = 'USER'
 AND P_NOUSER.STATUS = 'NONUSR'

您可以将表本身连接起来

这只是演示如何将两行转换为一行的部分。你还需要其他的桌子

 SELECT P_USER.CUSTUM_ID, 
        P_USER.STATUS,    -- I know is user
        P_NOUSER.STATUS   -- I know is not user
 FROM PARENT_INFO as P_USER
 JOIN PARENT_INFO as P_NOUSER
   ON P_USER.CUSTUM_ID = P_NOUSER.CUSTUM_ID
WHERE
     P_USER.STATUS = 'USER'
 AND P_NOUSER.STATUS = 'NONUSR'

M.DATE\u RATE
M.DATE
?像手套一样!我可以问你一个问题吗,为什么我们要按分组?我这样问是因为没有它,问题就没有了fails@Tavo每个
CUSTUM\u ID
有一个组,每个组由两个记录组成:一个用于
P.STATUS='USER'
,另一个用于
P.STATUS='NONUSR'
M.DATE\u RATE
M.DATE
,就像手套一样!我可以问你一个问题吗,为什么我们要按分组?我这样问是因为没有它,问题就没有了fails@Tavo每个
CUSTUM\u ID
有一个组,每个组由两个记录组成:一个用于
P.STATUS='USER'
,另一个用于
P.STATUS='NONUSR'