[英]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.