mysql右联接2个表并在table1中全选

时间:2019-01-08 08:22:47

标签: mysql join right-join

我正在数据库中使用两个表并进行查询,这些表如下所示:

student

     id  |  studentid  |  name  |  room
  ----------------------------------------
      1  |    28778    |   a    |   1
      2  |    28779    |   b    |   2
      3  |    28785    |   c    |   2
      4  |    28300    |   d    |   2
      5  |    28301    |   e    |   2
      6  |    28302    |   f    |   2
      7  |    28303    |   g    |   2
      8  |    28304    |   h    |   3
      9  |    28305    |   i    |   3
     10  |    28306    |   j    |   3

image

     id  |student_id|  image_filename  |  type  |
  ---------------------------------------------------
      1  |     1    |    qwrioqw.jpg   |  m6-1  |
      2  |     1    |    oerqew.jpg    |  m6-2  |
      3  |     2    |    qwwqeqw.jpg   |  m6-2  |
      4  |     4    |    wqeioqw.jpg   |  m6-1  |
      5  |     4    |    qwwoqeqw.jpg  |  m6-2  |
      6  |     7    |    eqwrioqw.jpg  |  m6-1  |
      7  |     7    |    rewtoqw.jpg   |  m6-2  |
      8  |     8    |    asdsadas.jpg  |  m6-2  |

我使用了命令SELECT name, id, image.image_filename, image.type FROM image RIGHT JOIN student ON student_id=student.id WHERE room=2 HAVING image.type = 'm6-2' ORDER BY id

此命令的结果是:

     name  |  id  |  image_filename  |  type  |
  ---------------------------------------------------
        b  |  2   |    qwwqeqw.jpg    |  m6-2  |
        d  |  4   |    qwwoqeqw.jpg   |  m6-2  |
        g  |  7   |    rewtoqw.jpg    |  m6-2  |

但是我想要结果全部student.room = 2image.type = 'm6-2'如果图像m6-2不存在,我想显示NULL:

     name  |  id  |  image_filename  |   type
  -----------------------------------------------
        b  |  2   |    qwwqeqw.jpg   |   m6-2
        c  |  3   |        NULL      |   NULL
        d  |  4   |    rewtoqw.jpg   |   m6-2
        e  |  5   |        NULL      |   NULL
        f  |  6   |        NULL      |   NULL
        g  |  7   |    rewtoqw.jpg   |   m6-2

如何编写命令?

2 个答案:

答案 0 :(得分:1)

当它们为NULL时,您需要修改以获得image.type:

SELECT name, id, image.image_filename, image.type 
FROM image RIGHT JOIN student ON student_id=student.id 
WHERE room=2 and (image.type = 'm6-2' or image.type is null) 
ORDER BY id

答案 1 :(得分:0)

您可以尝试以下操作-使用将您的其他条件置于ON子句而不是Where子句

   SELECT name, id, image.image_filename, image.type 
    FROM image RIGHT JOIN student ON student_id=student.id 
    and room=2 and image.type = 'm6-2'