2016-11-16 84 views
-1

我試圖得到一個基於從B列條件SQL加入後鮮明

的問題是,如果我所有的條件不會被尊重不同的值。

如果我只區分我想要的值,則列B數據不會連接。

什麼有我想:

查詢:

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類型的所有列outputed,只是一個例子):

|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 | 

的outputed列是好的,但不同的(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行中的連接表。

+0

什麼設置導致你放棄的從你的結果'id_conversacion = 1'記錄一個邏輯? –

+0

'distinct'在整行上運行,而不是一列,並且由於'pr_token'列中的值發生變化,您將獲得更多行。如果您只需要每個id_conversacion一行,您必須決定所需的pr_token值(可能通過應用最小/最大值和分組) – jpw

+0

DISTINCT適用於整個選定的行。如果你只想每個id_conversacion一次,你必須決定爲其他列選擇哪些值。 – jarlh

回答

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 

但是,你應該在其他列上使用聚合功能,或在其他情況下,就會出現在第一行的結果

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