关于查询和子查询

时间:2013-05-01 18:49:57

标签: mysql

这是我的查询,我已经知道了问题,但我对如何解决它并不知情:

$queryString = "SELECT * FROM `users_list` "WHERE `user_id` like (SELECT `user_id` FROM `equipments_list` WHERE  `equipment_mac` like '%$searchStringMacRevised%')"

所以,这有时是我得到的错误:

  

子查询返回超过1行

我看到问题是如果mac地址被多次注册,它会给我多个用户ID,当我们要选择信息时,我有太多的用户ID来生成表。你能帮助我看看我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

由于您只是直接与用户ID进行比较,因此可以使用IN子句,例如

SELECT * FROM users_list
WHERE user_id IN 
    (SELECT user_id FROM equipments_list
     WHERE  equipment_mac like '%$searchStringMacRevised%')

这样您就可以与多个用户ID进行比较。

如果我们只需要1个用户ID,那么您可能需要使用其他答案中建议的LIMIT类型的查询。

答案 1 :(得分:0)

这意味着您的inner select正在返回多个行,它应该完全返回1行以匹配外部查询的记录

   $queryString = "SELECT * FROM `users_list` "WHERE `user_id` like (SELECT `user_id` FROM `equipments_list` WHERE  `equipment_mac` like '%$searchStringMacRevised%' LIMIT 1)"