【问题标题】:Null as well as not Null Values空值和非空值
【发布时间】:2012-12-06 18:40:46
【问题描述】:

我想得到老师的信息,通过比较u.fld_id = ct.fld_teacher_id 如果 ct.fld_teacher_id 为空,我将显示尚未分配。但是 ct.fld_teacher_id 为 null 的行在执行时不会显示。

这是我的问题。

  SELECT ct.fld_id as id, ct.fld_serial, ct.fld_city, ct.fld_venue_name, 
        ct.fld_start_time, ct.fld_end_time, 
        ct.fld_duration, ct.fld_available_seats, 
        ct.fld_course_price, ct.fld_status,
        c.fld_name, u.fld_first_name, u.fld_last_name,
        ct.fld_status, ct.fld_teacher_id, ct.fld_training_name,
        ct.fld_class, ct.fld_level, ct.fld_is_fixed, tt.fld_name as training_type_name
   FROM tbl_course_training as ct, tbl_users as u,
        tbl_courses as c, tbl_training_types as tt
   WHERE c.fld_id = ct.fld_course_id AND u.fld_id = ct.fld_teacher_id AND 
       ct.fld_teacher_id = 'NULL' AND tt.fld_id = ct.fld_training_type_id 

【问题讨论】:

  • 你能给我们看一些示例数据吗?

标签: mysql sql select null


【解决方案1】:

我无法在不知道结构的情况下整理出您的查询。但是,我注意到的事情很少。

  • 您不能将空值与ct.fld_teacher_id = 'NULL' (null 不是字符串)

    ct.fld_teacher_id is null -- Correct way
    
  • 如果你需要选择即使ct.fld_teacher_id is null那么

    u.fld_id = isnull(ct.fld_teacher_id, u.fld_id) --or (sql-server) 
    u.fld_id = ct.fld_teacher_id or ct.fld_teacher_id is null --(my sql or sql-server)
    u.fld_id = COALESCE(ct.fld_teacher_id, u.fld_id)  --(my sql)
    
  • 还要避免像From Table1 t1, Table2 t2这样的旧方法加入表格

    From Table1 t1 JOIN Table2 t2 On t1.Key = t2.Key --Correct way
    
  • 我认为你需要在这里有几个Left Joins。请check this link了解Sql Joins的工作原理

【讨论】:

  • 我通过比较教授课程的 u.fld = ct.fld_teacher_id 获得教师详细信息(姓名、电子邮件等)。假设课程已注册,但尚未分配教师。 fld_teacher_id 中的值将为空。
  • @user1863272:在这种情况下,您需要left join。阅读上面的链接以了解联接。
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 2018-07-04
  • 1970-01-01
相关资源
最近更新 更多