【问题标题】:search from multiple tables using single keyword in mysql [duplicate]在mysql中使用单个关键字从多个表中搜索[重复]
【发布时间】:2013-05-31 07:21:26
【问题描述】:

我有 3 张桌子

表 1- 用户:

_______________________
|uid   |   uname      |
|______|______________|
| 1    |  John99      |
| 2    |  Steve12     |
| 3    |  Smith_a     |
| 4    |  Robert.t    |
| 5    |  Williams.a  |
|______|______________|

表 2-名字:

 _____________________
 |eid   |   fname     |
 |______|_____________|
 |1     |   John      |
 |2     |   Steve     |
 |3     |   Williams  |
 |4     |   Thomas    |
 |5     |   James     |
 |______|_____________|

表 3- 姓氏

 ____________________
 |eid   |   lname    |
 |______|____________|
 |1     |  Williams  |
 |2     |  George    |
 |3     |  Smith     |
 |4     |  Robert    |
 |5     |  Heart     |
 |___________________|

用户可以使用关键字“will”或“williams”进行搜索。我需要从上述所有 3 个表中搜索此关键字,并显示相应关键字的 uid、fname 和 lname。 示例:1.约翰·威廉姆斯 3.威廉姆斯史密斯 5.詹姆斯心

我尝试了 union 以及类似 '%will%',但结果中返回了重复项。有人可以帮我查询。

谢谢。

【问题讨论】:

    标签: mysql keyword


    【解决方案1】:

    假设eiduid 的外键,那么这样的事情应该可以工作:

    select u.uid, f.fname, l.lname
    from users u
      inner join firstname f on u.uid = f.eid
      inner join lastname l on u.uid = l.eid
    where f.fname like '%will%' or
      l.lname like '%will%'
    

    如果您还需要搜索 uname 字段,请使用另一个 or 语句将其添加到您的 where 条件中。

    结果:

    UID FNAME     LNAME
    1   John      Williams
    3   Williams  Smith
    

    【讨论】:

      【解决方案2】:
          SELECT uid, uname, fname, lname
          FROM Users
          INNER JOIN firstname
            ON firstname.eid = users.uid
          INNER JOIN lastname
            ON lastname.eid = users.uid
          WHERE uname LIKE '%will%'
            OR fname LIKE '%will%'
            OR lname LIKE '%will%'
      

      【讨论】:

        猜你喜欢
        • 2013-04-25
        • 2011-09-28
        • 2019-12-25
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 2015-08-30
        • 2011-03-17
        相关资源
        最近更新 更多