2010-10-11 65 views
0

我觉得我写一个字的问题,但它确实令人费解的我,我真的希望这里有人能解决这个问题:检查彼此的两个表在MySQL查询

我要选择表中的一行A.表A包括属性名称和编号。但在完成查询之前,我想根据表B检查它。表B包括名称,数字和用户的用户名。 根据用户的输入,它将行插入到表B中,其中包括用户名和姓名和号码。 现在在我的询问,我从表A中选择一排,我要确保有表B中没有任何行相匹配的姓名和电话号码的特定用户。

我已经试过WHERE(A.Name = B.Name AND A.Number = B.Number AND B.Username!= $用户名“),但我认为我是大错特错这一点。 任何帮助将是...惊人的。

+0

在MySQL中是'<>''不!='。 – mhitza 2010-10-11 04:32:48

+0

!=在过去为我工作,我认为两者都很好。 – RobHardgood 2010-10-11 04:44:52

回答

1
select a.id 
from a 
where 
a.name=:name 
and 
not exists(select 1 from b where b.id=a.id and b.name=a.name) 
+0

这看起来可能有帮助...你能解释一下这个代码吗? – RobHardgood 2010-10-11 04:51:46

+0

这个简单的选择a.id 从 其中 a.name =:名称 – 2010-10-11 04:56:28

+0

其中测试表中存在此用户b:不存在(从b中选择1其中b.id = a.id和b.name = a .name) – 2010-10-11 04:57:04

2
SELECT 
    A.id 
FROM 
    A 
    LEFT OUTER JOIN B ON 
     (A.Name = B.Name AND A.Number = B.Number) 
WHERE 
    B.Name IS NULL 
    AND B.Number IS NULL 
    AND B.Username = ? 
+0

这不会做到这一点...看,表B中会有一些包含用户名的行,但我要找的是那些没有的行。有可能是像罗伯特 - 1 - 苹果和罗伯特 - 2 - 苹果和罗伯特 - 1 - 布拉沃,但我需要的是罗伯特 - 1 - 查理... – RobHardgood 2010-10-11 04:30:05

+0

然后还加B.Username IS NULL来代替。我不清楚你想要什么。 A也有一个用户名列吗?你试图达到什么样的一般目的? – 2010-10-11 04:31:26

+0

A没有用户名列,只是“姓名”和“号码”匹配B.我仍然难住。 – RobHardgood 2010-10-11 04:38:41

0
IF NOT EXISTS (SELECT 1 
     FROM tableA a 
     INNER JOIN tableB b 
     ON a.name = b.name 
     AND a.number= b.number 
     AND b.UserName = 'user' and b.name = 'name'and b.number = 'number') 
    SELECT * 
    FROM tableA x 
    WHERE x.name = 'name'and x.number = 'number'