【问题标题】:MySql inner join and "OR" if value equals 0MySql 内连接和“或”如果值等于 0
【发布时间】:2016-01-11 21:45:15
【问题描述】:

所以我有这个内部连接

SELECT IDEvent,events.IDSubject,events.month,events.year
FROM events
    INNER JOIN subjects ON events.IDSubject = subjects.IDSubject
    INNER JOIN classes ON subjects.IDClass = classes.IDClass
    INNER JOIN students ON classes.IDClass = students.IDClass
WHERE events.month=10
    AND events.year=2015
    AND (students.DNI=DNI OR events.IDSubject='0')`

我想要做的是根据用户 IDSubject 选择所有事件,也许如果还有一些 IDSubject=0 的事件,我可以从用户那里获取那些依赖于用户的事件,但无法获取IDSubject=0 的,有人知道如何正确执行吗?

如果有人需要,我的数据库模型

【问题讨论】:

  • 可能你的意思是 events.IDSubject IS NULL?
  • 不,events.IDSubject = 0 表示该事件适用于所有人,不仅适用于学生的主题,特别是 '0' 是 varchar
  • 听起来你想要一个 left outer 加入 IDSubject,然后是一个 where 语句说 events.IDSubject = 0 or subjects.IDSubject is not null
  • subjects.IDSubject、events.IDSubject 和 students.IDSubject 是一个长度为 30 的 varchar
  • 是否可以不使用左连接而仅使用内连接?

标签: c# mysql join


【解决方案1】:
SELECT IDEvent,events.IDSubject,events.month,events.year
FROM events
      INNER JOIN subjects ON events.IDSubject = subjects.IDSubject
      INNER JOIN classes ON subjects.IDClass = classes.IDClass
      INNER JOIN students ON classes.IDClass = students.IDClass
WHERE events.month=10
      AND events.year=2015
      AND students.DNI=DNI
UNION SELECT IDEvent, events.IDSubject ,events.month ,events.year
      FROM events WHERE IDSubject='0'

【讨论】:

    【解决方案2】:

    如果我理解正确,您需要所有具有匹配主题或主题 ID=0 的事件(我猜主题表中不存在)。

    SELECT IDEvent
    , events.IDSubject
    ,events.month
    ,events.year
    FROM events
    LEFT OUTER JOIN subjects ON events.IDSubject = subjects.IDSubject
    INNER JOIN classes ON subjects.IDClass = classes.IDClass
    INNER JOIN students ON classes.IDClass = students.IDClass
    WHERE (events.IDSubject = 0 OR subjects.IDSubject is not null)
    AND events.month = 10
    AND events.year = 2015
    AND (students.DNI = DNI OR events.IDSubject = 0)
    

    【讨论】:

    • 仍然无法正常工作,我想根据 IDSubject 和 If IDSubject=0 获取所有的(不依赖于 student.IDsubject
    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 2018-11-30
    • 1970-01-01
    • 2013-07-07
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多