【问题标题】:MySQL - Select from table 1 if second table is empty or not not emptyMySQL - 如果第二个表为空或不为空,则从表 1 中选择
【发布时间】:2023-04-10 03:55:02
【问题描述】:

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

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

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

【问题讨论】:

  • 使用LEFT JOIN;当与students 中的行匹配的行不存在时,您将获得table2 字段的NULL
  • 当 LEFT JOIN 时,将外部表的 WHERE 条件移动到它的 ON 子句中。 (否则仍然是内部连接。)

标签: mysql sql select join


【解决方案1】:

左连接将为您完成。

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 建议以便正常工作

【讨论】:

  • 当 LEFT JOIN 时,将外部表的 WHERE 条件移动到它的 ON 子句中。 (否则仍然是内部连接。)
【解决方案2】:

您必须使用 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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-28
      • 2013-12-24
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2011-08-17
      相关资源
      最近更新 更多