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の両方が得られるため、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 に答える