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

誰かが私を正しい方向に向けてくれることを願っています。

ありがとうございました。

4

1 に答える 1

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

しかし、それは非常に奇妙に思えます...

于 2013-02-12T04:58:54.750 に答える