2016-09-04 98 views
-1

我有两个表;在一张桌子上我有这​​些人的信息,而在另一张桌子上我有这​​些人的战斗。结合mysql查询 - 结果跨表

为了澄清我的意思:

persons_information

username 
-------- 
abc 
anne 
hansgerman 
tester 
trudiname 
hoodie 
gabriel 
timo 
marco 
aharon 
leandro 
hans 
benutzer 
andreas 

战斗

challenger opponent 
---------------------- 
tester  hansgerman 
tester  trudiname 

我想要得到的是table1中所有没有被提及作为test2对手的人。

+0

谢谢你,无论如何,你的努力 – WEIDER

回答

0

尝试此查询:

select distinct * from persons 
left join on battles persons.username=battles.opponent 
where battles.opponent is null 
+0

遗憾的是它没有工作,因为我的英语不好我叫列oponnent而不是对手,虽然它没有工作。 – WEIDER

+0

忽略语法错误,'distinct *'既可以是一个矛盾也可以是重言式,这取决于您的观点 – Strawberry

-1

试试这个:

select persons.username 
from persons, battles 
where battles.opponent = persons.username AND battles.challenger != 'tester'; 

新的代码,这将返回所有用户在不出现在战斗表中的个人表,以及任何在战斗表中没有测试者作为他们的挑战者的用户。

SELECT username 
FROM persons 
WHERE NOT EXISTS 
( 
    SELECT username 
    FROM battles 
    where battles.challenger == 'tester' and battles.username == persons.username 
) 
+0

抱歉,我的原始答案是错误的,现在编辑它。这应该工作! – enem95

+0

我的想法是,如果用户测试人员已经准备好与他进行挑战,那么用户测试人员就不会询问/得到提示,所以只有这些人并不是他的好朋友。 – WEIDER

+0

我明白了。上面的这个查询应该返回所有没有测试人员的用户名作为他们在战斗表中的挑战者 – enem95

0

我想通了:

SELECT profile.username FROM profile, vs where vs.challenger != "tester" AND vs.oponnent NOT LIKE profile.username