MySQL跨多个表选择distinct

MySQL跨多个表选择distinct,mysql,sql,distinct,Mysql,Sql,Distinct,我有一个从多个表中选择所有列的查询,但它返回相同值的倍数(我只需要不同的值) 我如何合并这样的东西?当我尝试这个时,它仍然 Select Distinct A.*, B.*, C.*.... distinct仅在选择列名而不是全部(*)时有效吗?在reference中,它在引用列名时表示distinct,而不是在所有表中。我有什么办法可以做到这一点吗 编辑-我在下面添加了更多信息 对不起,伙计们,我刚回到我的电脑上。另外,我刚刚意识到我的查询本身就是问题所在,而Distinct与此无关 因此,

我有一个从多个表中选择所有列的查询,但它返回相同值的倍数(我只需要不同的值)

我如何合并这样的东西?当我尝试这个时,它仍然

Select Distinct A.*, B.*, C.*....
distinct仅在选择列名而不是全部(*)时有效吗?在reference中,它在引用列名时表示distinct,而不是在所有表中。我有什么办法可以做到这一点吗

编辑-我在下面添加了更多信息

对不起,伙计们,我刚回到我的电脑上。另外,我刚刚意识到我的查询本身就是问题所在,而Distinct与此无关

因此,我查询的总体目标是执行以下操作

  • 生成用户拥有的好友列表
  • 浏览好友并检查他们的活动(发布、添加好友等)
  • 显示一个按日期排序的朋友及其活动的列表(我想这就像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
    
    我遇到的问题(我认为与distinct相关)是,如果在表Friends中找到满足要求的值,Posts表的值也会出现。这意味着当我显示SQL语句的输出时,Posts值似乎显示了多次,而我要查找的实际值也显示了

    输出将如下所示(注意行中post值之间的差异)


    所以,正如您所看到的,我认为我有一个明显的问题(因为update1两次都出现),但是查询实际上只是选择所有的值。我在Post表中得到了我要查找的结果,但返回了所有其他值。因此,当我用PHP/HTML显示表时,将显示Post值,但我也会得到更新的副本(仅此示例)

    当您选择distinct*时,您会选择每一行,包括使记录唯一的一行。如果您想要比您现在得到的更好的东西,您必须在select子句中键入各个列名。

    我想您想要这样:

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

    这假设HHS表都具有相同的列数,并且它们具有相同的数据类型。否则,您必须选择特定的列才能这样做。

    如果您稍微解释一下您要查询的表之间的连接,这将很容易,因为您可以使用连接、联合(如上所述)甚至分组方式…

    您更新的帖子显示了以下连接条件之一:

    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)
    

    这些表格有什么关系?听起来你应该做一个
    联盟
    。。。发布他们的模式。你能提供一个你正在使用的数据和你想要的结果的例子吗<代码>选择不同的工作。你对它的预期需要更新。你不是有一些自动增量吗?这个问题很模糊,或者这不是你想要的吗?也许你应该显示整个SELECT-thefrom子句及其连接(或者如果你没有使用连接,则显示FROM子句和WHERE子句)。还有一些简单的数据显示了您声称的非唯一性—输入表和示例数据以及输出。两张表格足以说明问题;三个就够了。我为耽搁道歉。我出去了,刚回来。我更新了我的帖子,更新完全改变了这个问题。“你应该恢复你的变化,放弃这个问题,然后再问一个新问题。”达利乌斯说得对!编辑:)我更新了上面的帖子。很抱歉,没有相关信息。我出去了一会儿,刚回到电脑上。我更新了上面的帖子。你能看一下我的编辑吗?
    JOIN friends AS F ON (P.userid = F.user_2 OR P.userid = F.user_1)