[英]MySQL select distinct across multiple tables
我有一個查詢,該查詢從多個表中選擇所有列,但它返回的是相同值的倍數(我只想要不同的值)。
如何合並這樣的內容? 當我嘗試這個時,它仍然
Select Distinct A.*, B.*, C.*....
僅在選擇列名而不是全部(*)時,distinct僅起作用嗎? 在本參考中,它與列名的引用是不同的,而不是在所有表中。 有什么辦法可以做到這一點?
編輯-我在下面添加了更多信息
抱歉,我剛回到計算機上。 另外,我只是意識到查詢本身就是問題,與Distinct無關。
因此,我的查詢的總體目標是執行以下操作
這是我的桌子
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.