MySQL - Select 来自 table 1 如果第二个 table 为空或不为空

MySQL - Select from table 1 if second table is empty or not not empty

您好,我尝试显示来自两个 table 的数据,但是第二个 table 是空的

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

我可以为我的请求使用什么查询(如果第二个 table 为空我只需要学生列表,如果不需要我需要结果),我知道 Inner JOIN 仅在存在时显示记录

您必须使用 LEFT JOIN 从第一个 table 获取数据并匹配第二个 table.

的数据
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

左联接会为您完成。

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数据值。当然,您必须处理空 table

列中的空值

只有当数据同时出现在 table

上时,内部联接才会为您提供信息

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

正如 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 值。