Mysql加入两个表?

时间:2014-03-10 11:38:52

标签: mysql

我有两张桌子:

tbl_jurusan_snmptn

专栏:

kode_jurusan varchar(50) 

jurusan varchar(90)

和session_ujian_snmptn

专栏:

   id_ujian
   pilihan_1  varchar(50)
   pilihan_2  varchar(50)
   pilihan_3  varchar(50)
tbl_jurusan_snmptn中的

具有值:

kode_jurusan    jurusan

10221           Teknik Informatika

10223           Kedokteran

10999           Hukum

11999           Geologi

session_ujian_snmptn值:

    id_ujian   pilihan_1    pilihan_2    pilihan_3  
      001        10223        11999        10999
      002        11999        10221        10999

我尝试过这样的查询:

 SELECT * FROM session_ujian_snmptn a 
 INNER JOIN `tbl_jurusan_snmptn` b
 ON a.pilihan_1 = b.kode_jurusan
 OR a.pilihan_2 = b.kode_jurusan
 OR a.pilihan_3 = b.kode_jurusan
 WHERE a.id_ujian = '001'

但显示结果如下:

id_ujian   pilihan_1    pilihan_2    pilihan_3   kode_jurusan    jurusan

   001        10223        11999        10999      10221           Kedokteran
   001        10223        11999        10999      11999           Geologi
   001        10223        11999        10999      1099            Hukum

实际上我需要它是这样的:

  id_ujian   pilihan_1    pilihan_2    pilihan_3   
  001        Kedokteran    Geologi      Hukum      

非常感谢每一位帮助。 感谢。

2 个答案:

答案 0 :(得分:1)

你应该做多个JOINS,如下:

SELECT a.id_ujian, b1.jurusan, b2.jurusan, b3.jurusan
FROM session_ujian_snmptn a
JOIN tbl_jurusan_snmptn b1 ON a.pilihan_1 = b1.kode_jurusan
JOIN tbl_jurusan_snmptn b2 ON a.pilihan_2 = b2.kode_jurusan
JOIN tbl_jurusan_snmptn b3 ON a.pilihan_3 = b3.kode_jurusan

如果您需要获取id_ujian = 001的结果,请添加以下行:

WHERE a.id_ujian = 001

答案 1 :(得分:0)

试试:

   SELECT id_ujian ,
   max(case when a.pilihan_1 = b.kode_jurusan THEN jurusan end )as 'pilihan_1' , 
   max(case when a.pilihan_2 = b.kode_jurusan THEN jurusan end )as 'pilihan_2 ' ,
   max(case when a.pilihan_3 = b.kode_jurusan THEN jurusan end )as 'pilihan_3'      
   FROM  session_ujian_snmptn a 
   inner join `tbl_jurusan_snmptn` b 
   on a.pilihan_1 = b.kode_jurusan 
   or a.pilihan_2 = b.kode_jurusan 
   or a.pilihan_3 = b.kode_jurusan 
   where a.id_ujian = '001'

DEMO HERE

如果要选择所有行,则只考虑使用GROUP BY

 SELECT id_ujian ,
 max(case when a.pilihan_1 = b.kode_jurusan THEN jurusan end )as 'pilihan_1' , 
 max(case when a.pilihan_2 = b.kode_jurusan THEN jurusan end )as 'pilihan_2 ' ,
 max(case when a.pilihan_3 = b.kode_jurusan THEN jurusan end )as 'pilihan_3'      
 FROM  session_ujian_snmptn a 
 inner join `tbl_jurusan_snmptn` b 
 on a.pilihan_1 = b.kode_jurusan 
 or a.pilihan_2 = b.kode_jurusan 
 or a.pilihan_3 = b.kode_jurusan 
 group by id_ujian

DEMO HERE