1

我需要一些帮助,我有这 2 张桌子:

table "clients"
+------+-------------+-----------+
   id  |  email      |  otherinfo|
+------+-------------+-----------+
   1   |test@ts.ts   |   .....   |
+------+-------------+-----------+
   2   |test2@.ts.ts |   ....    |
+------+-------------+-----------+

table "comptes"
+------+-------------+---------------+
   id  |  login      |   id_clients  | 
+------+-------------+---------------+
 1     |     test    | 1             |
+------+-------------+---------------+
 1     |     test2   | 2             |
+------+-------------+---------------+
 etc.  |    etc.     |       etc..   |
+------+-------------+---------------+

在我的网站中,当用户创建帐户时,他会提供两个表的信息。所以我想在添加之前测试数据库中是否存在 LOGIN 或 EMAIL,就像这样

'select clients.email,comptes.login    
from clients,comptes     
where clients.email='test2@.ts.ts'
 or comptes.login ='test';

但是这个查询返回空结果,我厌倦了其他组合但没有给出正确的结果。所以我在这里搞砸了

4

4 回答 4

4

您需要使用 JOIN 来告诉 mysql 数据是如何相关的: http: //dev.mysql.com/doc/refman/5.6/en/join.html

例如:

SELECT clients.email, comptes.login
  FROM clients 
  JOIN comptes ON clients.id = comptest.id_clients
 WHERE clients.email='test2@.ts.ts'
    OR comptes.login ='test';
于 2012-08-14T20:33:42.997 回答
1

您需要明确标识您的 JOIN 字段。逗号分隔的连接语法使用起来真的很糟糕(IMO),并且会产生意想不到的结果。在您的情况下,它试图在两个 id 列上加入两个表。所以试试这个

SELECT clients.email, comptes.login
FROM clients INNER JOIN comptes on clients.id = comptes.id_clients
WHERE clients.email='test2@.ts.ts' OR comptes.login = 'test';

请注意,在这种情况下,您将返回两行,因为您的 WHERE 子句最终将为您提供客户端 ID 1 和 2。

于 2012-08-14T20:34:01.827 回答
1

您根本不需要加入即可查看它们是否存在。以下查询返回任何匹配记录的 id:

select c.id, 'email' as matchtype
from clients c
where c.email = <email>
union all
select c.id, 'login' as matchtype
from comptes c
where c.login = <login>

这会为您提供匹配的 id 并告诉您重复项出现的位置(如果感兴趣的话)。如果您只想使用 0 或 1 标志来指定是否存在重复项,请执行以下操作:

select count(*) as numdups
from ((select c.id, 'email' as matchtype
       from clients c
       where c.email = <email>
      )
      union all
      (select c.id, 'login' as matchtype
       from comptes c
       where c.login = <login>
     )
    ) t
于 2012-08-14T20:39:00.683 回答
0
SELECT cl.email, co.login
FROM clients AS cl
    INNER JOIN comptes AS co ON cl.id = co.id_clients
WHERE cl.email =  'test2@.ts.ts' OR co.login = 'test'
于 2012-08-14T20:34:39.003 回答