0

2 つのケースが一致する場合、結果を取得しようとしています。

  • table_users.Email='user@email.com'
  • table_devices.DeviceUuid='51ec969c-8546-41f4-a748-ec2458c81d17'

しかし、 table_users.Email='user@email.com' が存在するにもかかわらず、空の結果が得られます!!!

SELECT table_users.Email, table_users.DeleteFlag, table_devices.DeviceUuid 
FROM table_users, table_devices 
WHERE table_users.Email='user@email.com' 
  OR table_devices.DeviceUuid='51ec969c-8546-41f4-a748-ec2458c81d17';

何が足りないの...? パフォーマンス上の理由から、これを 2 つのクエリに分割したくありません。

ありがとう!

4

2 に答える 2

0

あなたのphpコードは、実際には多くのレコードが返される可能性がありますが、1つのレコードのみが返されると想定していますか?

2 つのテーブルに関連性がない場合は、2 つのクエリを使用して必要な情報を取得する必要があります。結合条件がない場合、クエリに一致しない行ごとに 1 つのレコードが取得されるため、クエリは 2 つの個別のクエリを使用するよりもはるかに効率が悪くなります。

クエリを 1 つだけ使用したい場合は、次のようにしてください。

SELECT Email, DeleteFlag, NULL AS DeviceUuid
FROM users
WHERE Email='user@email.com'
UNION
SELECT NULL AS Email, NULL AS DeleteFlag, DeviceUuid
FROM devices
WHERE DeviceUuid = '51ec969c-8546-41f4-a748-ec2458c81d17';

OR を AND に変更し、指定されたデバイス Uuid がテーブルにある場合、元のクエリも機能するはずです。

于 2012-10-27T16:23:06.887 に答える
0

結局のところ、これを行う唯一の方法は、間違いなく 2 つの別々のクエリを使用することです。これは、2 つのものが 2 つの別々のテーブルに存在するかどうかを確認しており、そのうちの 1 つが存在しない可能性があるため、それらを結合する方法がないためです。

私が必要とするロジックについては、明らかに 2 つの別々の SELECT クエリが唯一の解決策です。

とにかく助けてくれてありがとう!

于 2012-11-29T20:14:50.227 に答える