2013-02-12 88 views
0

我想從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

你的'FROM'子句中不能有'OR'。 – hjpotter92 2013-02-12 04:54:26

+0

任何列可爲空或每行返回總是一種或另一種?這兩個表中是否有結果可能? – 2013-02-12 04:54:27

+0

是的,我需要檢查兩個表給定的關鍵字 – TNK 2013-02-12 04:55:53

回答

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%') 

但是這似乎很奇怪......

+0

感謝您回覆..您的查詢正在工作。但是我能否知道是否有辦法改變列名稱,如member_id,member_name,member_code和member_type; – TNK 2013-02-12 05:05:46

+0

@TharangaNuwan - 不知道我是否理解 - 你是什麼意思?除非需要更多列,否則不能更改列名稱。兩個查詢中的聯合必須具有相同的列名稱。 – sgeddes 2013-02-12 05:08:15

+0

是的..它的工作..但有一件事只是想從tuor_name和institute_name給出的關鍵字,然後我需要在同一時間從兩個表中得到結果。 – TNK 2013-02-12 05:15:29