SQL语言加入后不同

时间:2016-11-16 08:24:12

标签: mysql sql

我试图从B列的条件中获得A中的不同值。

问题在于,如果我都是,那么条件就不会得到尊重。

如果我只区分我想要的值,则不会连接B列数据。

我尝试了什么:

查询A:

SELECT DISTINCT id_conversacion, convo_started, started_by, has_unread, pr_token,
                hidden_started, hidden_recipiente, de_persona, para_persona, convo_perteneciente
FROM cs_conversaciones
INNER JOIN cs_privatemessages
    ON cs_privatemessages.convo_perteneciente = cs_conversaciones.id_conversacion
WHERE cs_privatemessages.de_persona = 123456 OR
      cs_privatemessages.para_persona = 123456
ORDER BY id_conversacion

输出(Didnt键入所有列的输出,只是一个例子):

|id_conversacion|convo_started|started_by|has_unread|pr_token|...etc|
---------------------------------------------------------------------
|1              |  2016-06-05 |  123456  |     0    |  dd5f4 | 
|1              |  2016-06-05 |  123456  |     0    |  4fd85 |
|2              |  2016-06-05 |  123456  |     0    |  8sa8s |

输出的列是好的,但是不同的(id_conversacion),应与cs_privatemessages.convo_perteneciente相关 重复(1,1,2)

查询B:

SELECT DISTINCT id_conversacion
FROM cs_conversaciones
INNER JOIN cs_privatemessages
    ON cs_privatemessages.convo_perteneciente = cs_conversaciones.id_conversacion
WHERE cs_privatemessages.de_persona = 123456 OR
      cs_privatemessages.para_persona= 123456
ORDER BY id_conversacion

输出:

我反过来说,不同的是没有,但输出的列不是。

|id_conversacion|
-----------------
|      1        |
|      2        |

预期结果(缺少来自联接的列):

|id_conversacion|convo_started|started_by|has_unread|pr_token|de_persona|etc
-------------------------------------------------------------------------
|1              |  2016-06-05 |  123456  |     0    |  dd5f4 | 123456 |
|2              |  2016-06-05 |  123456  |     0    |  8sa8s | 126544 |

这使我成为不同的重复,因为在连接表中还有1行。

2 个答案:

答案 0 :(得分:0)

我相信你要做的就是分组 http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html

SELECT id_conversacion, convo_started, started_by, has_unread, pr_token,
                hidden_started, hidden_recipiente, de_persona, para_persona, convo_perteneciente
FROM cs_conversaciones
INNER JOIN cs_privatemessages
    ON cs_privatemessages.convo_perteneciente = cs_conversaciones.id_conversacion
WHERE cs_privatemessages.de_persona = 123456 OR
      cs_privatemessages.para_persona = 123456
GROUP BY id_conversacion
ORDER BY id_conversacion

但是你应该在其他列上使用聚合函数,或者在其他情况下会有第一行结果

答案 1 :(得分:0)

解决。

联接表返回重复的值:

通过解决问题添加MAX()和组。

查询:

SELECT DISTINCT id_conversacion, convo_started, started_by, has_unread, MAX(pr_token) as pr_token, hidden_started, hidden_recipiente, MAX(de_persona), MAX(para_persona), convo_perteneciente FROM cs_conversaciones INNER JOIN cs_privatemessages ON cs_privatemessages.convo_perteneciente = cs_conversaciones.id_conversacion WHERE cs_privatemessages.de_persona = 123456 OR cs_privatemessages.para_persona = 123456 GROUP BY id_conversacion,pr_token