我有一个查询从多个表中选择所有列,但它返回相同值的倍数(我只想要不同的值)。
我怎样才能加入这样的东西?当我尝试这个时,它仍然是
Select Distinct A.*, B.*, C.*....
distinct只在选择列名而不是全部(*)时才有效吗?在this引用中,它表示与列名称不同,而不是在所有表中。我有什么方法可以做到这一点吗?
编辑 - 我在下面添加了更多信息
对不起伙计们,我刚回到我的电脑前。此外,我刚刚意识到我的查询本身就是问题,而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
我遇到的这个问题(我认为它与distinct有关)是,如果发现值满足要求,比如表Friends,那么Posts表的值也会出现。这意味着当我显示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值,但我也会获得更新的重复项(仅适用于此示例)
答案 0 :(得分:0)
当您选择不同的*时,您选择每一行,包括使记录唯一的那一行。如果你想要比你得到的更好的东西,你必须在select子句中键入单独的列名。
答案 1 :(得分:0)
我想你想要这个:
select *
from tableA
union
select *
from tableB
union
select *
from tableC
这假设HHS表具有相同的列数并且它们具有相同的数据类型。不是这样,你必须选择特定的列来实现它。
答案 2 :(得分:0)
如果你再详细解释一下你所查询的表之间的联系会很容易,因为你可以使用联接,联合(如上所述)甚至分组...
答案 3 :(得分:0)
您更新的帖子显示以下其中一个加入条件:
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)