我如何进行此选择查询

时间:2013-02-12 04:52:13

标签: mysql sql select

我正在尝试从2个表中获取member_id,member_name,member_code和成员类型与成员名称的一部分匹配。

我的表结构

  

导师表
  -tutor_id
  -tutor_name
  -tutor_code

     

学院表
  -institute_id
  -institute_name
  -institute_code

当我从tutor_name或institute_name提供名称的一部分时,查询需要认识到这是一个导师或研究所。然后需要选择结果。

我试过这样的事情。但没有运气。

SELECT  
    COALESCE(t.tutor_id, i.institute_id) AS member_id,
    COALESCE(t.tutor_name, i.institute_name) AS member_name,
    COALESCE(t.tutor_code, i.institute_code) AS member_code
FROM (tutors AS t OR institutes AS i)
WHERE (t.tutor_name LIKE '%jaya%' OR i.institute_name LIKE '%jaya%');

希望有人指出我正确的方向。

谢谢。

1 个答案:

答案 0 :(得分:2)

最好的办法是使用UNION:

SELECT t.tutor_id member_id, t.tutor_name member_name, t.tutor_code member_code, 'tutor' as type
FROM tutors t
WHERE t.tutor_name LIKE '%jaya%'
UNION 
SELECT t.institute_id, t.institute_name, t.institute_code, 'institute' as type
FROM institute i
WHERE i.institute_name LIKE '%jaya%'

然而,这可能不会返回您正在寻找的内容。没有共同的领域,就无法确定它是导师还是研究所......

如果教师存在,你可以申请这样的黑客,不要向学院展示:

SELECT t.tutor_id member_id, t.tutor_name member_name, t.tutor_code member_code, 'tutor' as type
FROM tutors t
WHERE t.tutor_name LIKE '%jaya%'
UNION 
SELECT t.institute_id, t.institute_name, t.institute_code, 'institute' as type
FROM institute i
WHERE i.institute_name LIKE '%jaya%' 
   AND 0 = (SELECT COUNT(*) FROM tutors WHERE tutor_name LIKE '%jaya%')

但这看起来很奇怪......