使用JOIN在多个表上自由搜索

时间:2014-03-23 18:14:44

标签: mysql sql join

我有一个学生数据库,他们有一个全名,一个地点,以及他们经常光顾的学校名单。

"学生"表

id | fullname | location
------------------------

"位置"表

id | zipcode | city
-------------------

"学校"表

id | name
---------

" student_school" table(在学校拥有两个外键,用户为每个用户创建学校列表)

id | id_student | id_school
---------------------------

我希望通过学生进行搜索,将搜索词与student.fullname,location.zipcode,location.city,school.name进行比较,并返回与这些条件中的一个(或多个)匹配的所有学生。 请注意,学生可以有一个空位置,因此我们需要一个extern连接。

1 个答案:

答案 0 :(得分:0)

以下是基于正则表达式的匹配示例:

  SELECT distinct s.id, s.fullname
  FROM student_school ss
       JOIN student s ON s.id = ss.id_student
       LEFT JOIN LOCATION l ON s.LOCATION = l.id
       JOIN school sc ON ss.id_school = sc.id
  WHERE  (s.fullname RLIKE 'Sasha.*') or 
         (ifnull(l.zipcode RLIKE '100.*', 0)) or
         (ifnull(l.city RLIKE 'New.*', 0)) or
         (sc.name RLIKE '.*2')

这里是完整的SQL fiddle

因此,一般的想法是加入所有学生数据,过滤符合至少一个标准的行,并使用distinct来分组数据,避免重复结果。

<强>更新

要包含没有学校记录的学生,您可以使用以下短语:

student_school ss
RIGHT JOIN student s ON s.id = ss.id_student
LEFT JOIN LOCATION l ON s.LOCATION = l.id
LEFT JOIN school sc ON ss.id_school = sc.id