mysql right join 2 tables and select all in table1
mysql right join 2 tables and select all in table1
我在数据库中使用两个表并查询这些表如下所示:
Table 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
Table 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 = 2
AND image.type = 'm6-2'
如果图像 m6-2 是 none 我想要显示 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
如何编写命令?
当它们为 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
您可以尝试以下 - 使用将您的其他条件放在 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'
我在数据库中使用两个表并查询这些表如下所示:
Table 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
Table 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 = 2
AND image.type = 'm6-2'
如果图像 m6-2 是 none 我想要显示 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
如何编写命令?
当它们为 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
您可以尝试以下 - 使用将您的其他条件放在 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'