您好我尝试显示两个表中的数据,但第二个表是空的
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
我可以用于我的请求的查询(如果第二个表为空我只需要学生列表,如果不是我需要结果),我知道内部联接只显示记录
答案 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数据值。当然,您必须处理空表
列中的空值
内部联接仅在两个表中都存在数据时为您提供信息
编辑: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值。