簡體   English   中英

MySQL跨多個表選擇不同的

[英]MySQL select distinct across multiple tables

我有一個查詢,該查詢從多個表中選擇所有列,但它返回的是相同值的倍數(我只想要不同的值)。

如何合並這樣的內容? 當我嘗試這個時,它仍然

Select Distinct A.*, B.*, C.*....

僅在選擇列名而不是全部(*)時,distinct僅起作用嗎? 參考中,它與列名的引用是不同的,而不是在所有表中。 有什么辦法可以做到這一點?

編輯-我在下面添加了更多信息

抱歉,我剛回到計算機上。 另外,我只是意識到查詢本身就是問題,與Distinct無關。

因此,我的查詢的總體目標是執行以下操作

  1. 生成用戶擁有的朋友列表
  2. 遍歷朋友並檢查他們的活動(發布,添加朋友等)。
  3. 顯示按日期排序的朋友及其活動的列表(我想這像是Facebook的一筆交易)。

這是我的桌子

update_id |  update | userid  | timestamp  //updates table

post_id |  post | userid  | timestamp      //posts table

user_1 |   user_2  | status   |  timestamp   //friends table

這是我的查詢

SELECT U.* , P.* ,F.* FROM posts AS P 
JOIN updates AS U ON P.userid = U.userid 
JOIN friends AS F ON P.userid = F.user_2 or F.user_1
WHERE P.userid IN (
        select user_1 from friends where user_2 = '1'
        union
        select user_2 from friends where user_1 = '1'
        union
        select userid from org_members where org_id = '1'
        union
        select org_id from org_members where userid = '1'
        ) 
ORDER BY P.timestamp, U.timestamp, F.timestamp limit 30

我遇到的問題(我認為與“與眾不同”有關)是,如果在“朋友”表中發現值滿足要求,那么“帖子”表的值也會出現。 這意味着當我顯示SQL語句的輸出時,似乎好像多次顯示了Posts值,同時也顯示了我正在尋找的實際值

輸出將顯示如下內容(注意各行中發布值之間的差異)

update_id |  update | userid  | timestamp | post_id |  post | userid  | timestamp | user_1 |   user_2  | status   |  timestamp

     1    | update1 |   1    | 02/01/2013 |    1    |  post1|  1      |  2/02/2013|  1     |   2       |  1       | 01/30/2013
     1    | update1 |   1    | 02/01/2013 |    2    |  post2|  1      |  2/03/2013|  1     |   2       |  1       | 01/30/2013

因此,正如您所看到的,我以為我遇到了一個明顯的問題(因為update1兩次都出現了),但是查詢實際上只是選擇了所有值。 我在Post表中得到了想要的結果,但是所有其他值都返回了。 因此,當我用PHP / HTML顯示表時,將顯示Post值,但我也會得到更新的重復(僅在此示例中)

選擇唯一的*時,將選擇每一行,包括使記錄唯一的一行。 如果您想要的東西比所獲得的要好,則必須在select子句中鍵入各個列的名稱。

我想你想要這個:

select *
from tableA
union
select * 
from tableB
union
select * 
from tableC

假設HHS表都具有相同的列數並且具有相同的數據類型。 否,您必須選擇特定的列才能做到這一點。

如果您多解釋一下您要查詢的表之間的連接,這將很容易,因為您可以使用聯接,並集(如上所述)甚至分組依據...

您更新后的帖子將JOIN條件之一顯示為:

JOIN friends AS F ON P.userid = F.user_2 OR F.user_1

這等效於:

JOIN friends AS F ON (P.userid = F.user_2 OR F.user_1  != 0)

並將包含許多您不打算包含的行。 您可能打算:

JOIN friends AS F ON (P.userid = F.user_2 OR P.userid = F.user_1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM