我正在尝试让这个 MySQL 搜索查询正常工作。我希望它返回 firstName、lastName、email 或至少一个 secondaryEmail 与搜索字符串匹配的所有用户。一个用户可以有多个辅助电子邮件地址。
这是我的 SQL 查询:
SELECT `users`.`id`,
`users`.`first_name` AS `firstName`,
`users`.`last_name` AS `lastName`,
`users`.`email`,
`usersSecondaryEmails`.`id` AS `usersSecondaryEmails.id`,
`usersSecondaryEmails`.`email` AS `usersSecondaryEmails.email`
FROM `Users` AS `users`
LEFT OUTER JOIN `UsersSecondaryEmails` AS `usersSecondaryEmails`
ON `users`.`id` = `usersSecondaryEmails`.`user_id`
WHERE (`users`.`first_name` LIKE '%bob%'
OR `users`.`last_name` LIKE '%bob%'
OR `users`.`email` LIKE '%bob%'
OR `usersSecondaryEmails`.`email` LIKE '%bob%');
此查询成功返回,但是当只有一个匹配的辅助电子邮件时,它只返回该电子邮件,而不是所有关联的电子邮件。如果找到至少一封辅助电子邮件,我如何更改此查询以返回所有电子邮件?我知道它很可能会有一个包含 EXISTS 的子查询,但我不太确定我会把它放在哪里。
编辑:用户表有名字、姓氏和电子邮件 UsersSecondaryEmails 表有 user_id 和 email
如果用户有 2 个辅助电子邮件(UserSecondaryEmails 上的“电子邮件”列),并且其中至少一个与搜索字符串匹配,我希望取回他们所有的辅助电子邮件。截至目前,这只会返回匹配的电子邮件。
最佳答案
子查询应该做
SELECT
`users`.`id`,
`users`.`first_name` AS `firstName`,
`users`.`last_name` AS `lastName`,
`users`.`email`,
`usersSecondaryEmails`.`id` AS `usersSecondaryEmails.id`,
`usersSecondaryEmails`.`email` AS `usersSecondaryEmails.email`
FROM users users, UsersSecondaryEmails usersSecondaryEmails
WHERE users.id IN (SELECT user_id FROM UsersSecondaryEmails)
AND users.id = usersSecondaryEmails.user_id
AND
(
`users`.`first_name` LIKE '%bob%'
OR
`users`.`last_name` LIKE '%bob%'
OR
`users`.`email` LIKE '%bob%'
)
关于MySQL获取所有关联记录,其中至少有一条记录匹配查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51290576/