繁体   English   中英

SELECT查询中不同MySQL表中两个字段的多位置

[英]Multi-WHERE for two fields in different MySQL tables for a SELECT query

如果两种情况相符,我会尝试重新获得结果:

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

我想念什么...? 出于性能原因,我不想将其分为两个查询。

谢谢!

您的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,则原始查询也将起作用。

事实证明,执行此操作的唯一方法肯定是在两个单独的查询中,因为我正在检查两个单独的表中是否存在两件事,并且没有办法将它们联接起来,因为其中一个可能不存在。

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

谢谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM