J'essaie d'obtenir tous mes messages où Vote IPAddress ne correspond pas à la mienne. Voici mon SQL. Le problème est, je reçois le poste que j'ai voté quand quelqu'un d'autre a également voté pour cela. Je pensais que ce code disait select post quand left join est possible et il n'y a pas d'IPAddr qui == mine. Mais cela ne semble pas se produire. Comment est-ce que j'écris ceci?Mauvais résultats dus à des jointures à gauche
select * from Post
left join Vote as V on V.post=Post.id AND V.IPAddr<>123
where flag='1';
Voici quelques données fictives pour illustrer le problème.
create table P(id int primary key, body text);
create table V(id int primary key, val int, ip int, post int);
insert into P values(1,"aaa");
select * from P left join V on V.post=P.id where (V.ip is null or V.ip<>123);
insert into V values(1, 2,123,1);
select * from P left join V on V.post=P.id where (V.ip is null or V.ip<>123);
insert into V values(2, 2,13,1);
select * from P left join V on V.post=P.id where (V.ip is null or V.ip<>123);
C'est vraiment comment j'ai écrit le code original. Il n'a pas fonctionné ainsi la réécriture dans la question ci-dessus. –
Ne pense pas que je peux faire plus sans voir des données et des exemples de sortie. – RedFilter
Ok, je vais voir ce que je peux faire. Je devrais avoir quelque chose dans les 10 minutes si je ne finis pas voir la vraie erreur. –