sql查询有几行是重复的

时间:2014-01-14 11:15:55

标签: mysql sql

我希望具有正确ref的用户的值以及具有额外值1的用户的值 我有以下查询,但它没有给出唯一的行,它给出重复的行。如何解决?我非常感谢任何帮助。

基本上它的重复值为ref.id如果tab2.user = 1在最后的查询中再次重复4,6行我不想要两个但只有一个因为ref.id = 0不存在但我想要额外= 1

    SELECT  * FROM 
    tab1,tab2 
    WHERE tab1.ref=tab2.ref 
    AND tab1.to_users = 1 
   OR users.extra=1;

TAB1

sno  users  ref  extra
    1     1     4     1
    2     2     5     0
    3     3     0     1
    4     1     0     1
    5     2     5     0
    6     3     0     1

TAB2

ref  ad    user
4     A      1
5     B      2
6     C      1

4 个答案:

答案 0 :(得分:1)

在你的最后评论之后:

SELECT sno, users, tab1.ref, extra, max(ad) as ad
FROM 
    tab1,tab2 
    WHERE tab1.ref=tab2.ref 
    AND tab1.users = 1 
   OR tab1.extra=1
group by sno, users, ref, extra;

这将最大化广告列(或者您可以使用min - 全部取决于您的要求) 例如:http://sqlfiddle.com/#!2/1837e/25

答案 1 :(得分:0)

您可能需要使用加入

SELECT  * FROM 
tab1 LEFT JOIN tab2 ON tab1.ref=tab2.ref 
WHERE tab1.users = 1 OR tab1.extra=1;
GROUP BY tab1.users

编辑:按

添加分组

答案 2 :(得分:0)

GROUP BY用户,请尝试以下语法

 SELECT  * FROM 
 tab1,tab2 
 WHERE tab1.ref=tab2.ref AND (tab1.users = 1 OR tab1.extra=1)
 GROUP BY users;

连接表格比编写语法更常见,

SELECT  * FROM 
tab1 JOIN tab2 ON tab1.ref=tab2.ref AND (tab1.users = 1 OR tab1.extra=1)
GROUP BY users;

答案 3 :(得分:0)

您应该使用括号来更改And和OR的优先级:

SELECT  * FROM 
    tab1,tab2 
    WHERE tab1.ref=tab2.ref 
    AND (tab1.to_users = 1 
   OR users.extra=1); 

否则它会像这样运行:

SELECT  * FROM 
        tab1,tab2 
        WHERE (tab1.ref=tab2.ref 
        AND tab1.to_users = 1 )
       OR users.extra=1; 

UPDFATE:

我认为你正在寻找具有相同引用的行,其中to_users是一个或者extra是一个。然后正如KrzysztofRosiński所说,LEFT JOIN应该可以做到这一点,但是不需要使用GROUP BY,也许你应该使用这样的DISTINCT:

SELECT DISTINCT  * FROM 
tab1 LEFT JOIN tab2 ON tab1.ref=tab2.ref 
WHERE tab1.users = 1 OR tab1.extra=1;