我希望具有正确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
答案 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;