MySQL - 如果第二个表为空或不为空,则从表1中选择

时间:2015-01-16 13:02:46

标签: mysql sql select join

您好我尝试显示两个表中的数据,但第二个表是空的

SELECT ST.* , E.data, E.status
FROM `students` ST
INNER JOIN `table2` E ON E.id_student=ST.id_student
WHERE    ST.class='$class' AND E.data LIKE '$year-$month-%'
ORDER BY ST.surname, ST.name, E.data

我可以用于我的请求的查询(如果第二个表为空我只需要学生列表,如果不是我需要结果),我知道内部联接只显示记录

3 个答案:

答案 0 :(得分:3)

左连接将为您完成。

SELECT ST.* , E.data, E.status
FROM `students` ST
LEFT JOIN `table2` E
ON E.id_student=ST.id_student and E.data LIKE '$year-$month-%'
WHERE ST.class='$class'
ORDER BY ST.surname, ST.name, E.data

即使E数据为空,它也会为您提供ST数据值。当然,您必须处理空表

列中的空值

Left Join diagram

内部联接仅在两个表中都存在数据时为您提供信息

Inner join diagram

编辑:jarlh建议以便正常工作

答案 1 :(得分:1)

您必须使用 LEFT JOIN 从第一个表中获取数据并匹配第二个表的匹配数据。

SELECT ST.*, E.data, E.status
FROM `students` ST
LEFT JOIN `table2` E ON E.id_student=ST.id_student AND E.data LIKE '$year-$month-%'
WHERE ST.class='$class'
ORDER BY ST.surname, ST.name, E.data

答案 2 :(得分:0)

正如Saharsh Shah所述(抱歉,无法发表评论),你必须使用LEFT JOIN,你还可以添加IFNULL代码,以便例如,如果你想要ST.name ST.surname和ST.class值使用:

    SELECT  IFNULL(ST.name,''),IFNULL(ST.surname,''),IFNULL(ST.class,''), E.data, E.status
   FROM `students` ST
    LEFT JOIN `table2` E ON E.id_student=ST.id_student AND E.data LIKE '$year-$month-%'
    WHERE ST.class='$class'
    ORDER BY ST.surname, ST.name, E.data

因此,您在所选字段上没有NULL值。