0

如果两个案例匹配,我正在尝试取回结果:

  • 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';

我错过了什么……?出于性能原因,我不想将其分成两个查询。

谢谢!

4

2 回答 2

0

您的 php 代码是否假定只返回一条记录,而实际上可能返回许多记录?

如果这两个表没有任何关系,你应该使用两个查询来获取你想要的信息。如果没有连接条件,您的查询的效率将远低于使用两个单独的查询,因为您将获得与查询不匹配的每一行的一条记录。

如果你坚持只使用一个查询,试试这个:

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

事实证明,这样做的唯一方法肯定是在两个单独的查询中,因为我正在检查两个单独的表中是否存在两件事并且没有办法加入它们,因为其中一个可能不存在。

对于我需要的逻辑,两个单独的 SELECT 查询显然是唯一的解决方案。

无论如何,感谢您的帮助!

于 2012-11-29T20:14:50.227 回答