【问题标题】:How can I do SQL query based on two conditions on two columns?如何根据两列的两个条件进行 SQL 查询?
【发布时间】:2022-01-26 12:39:23
【问题描述】:

see the EARD scenario

Major_applied_for 表

id preference application_number (fk) major_code (fk)
1 1 2 1
2 1 1 1
3 3 3 1
4 2 1 2
5 2 2 2

一些说明:

• Major 表的 code 属性包含 (1)CS 用于计算机科学,(2)BMS 用于商业管理等。

• Major_Applied_For 的偏好属性是 1、2 或 3(1 表示第一个 选择,2是第二选择,3是第三选择) . . .

这是一个多对多关系解析的表,我想获取所有以CS为第一选择,BMS为第二选择的申请号。

我试过这条sql语句,但逻辑不正确。

SELECT m.id, CONCAT(m.fname, " ", m.lname) AS Fullname, app.number AS application_no FROM 申请者 m,申请者 app,major_applied_for mjaf WHERE ((mjaf.major_code = 1 AND mjaf.preference = 1) AND (mjaf.major_code = 2 AND mjaf.preference = 2) AND (mjaf.application_number = app.number AND app.applicant_id = m.id));

我该如何解决这个问题?

【问题讨论】:

  • 发布所有涉及的表的完整数据样本。
  • 我认为如果您使用JOIN 语句而不是在WHERE 子句中加入表,这可能会更直接。但是我们不知道申请人和申请表是什么样子的。

标签: mysql sql qsqlquery


【解决方案1】:

找CS为第一偏好的申请人,找BMS为第二偏好的申请人。内联这两组并检查它们的名称。

with first_cs as (
    select c.applicant_id
    from major_applied_for a inner join major b on a.major_code = b.code and a.preference = 1 and b.name = 'CS'
                             inner join application c on a.application_number = c.number ), second_bms as(
    select c.applicant_id
    from major_applied_for a inner join major b on a.major_code = b.code and a.preference = 2 and b.name = 'BMS'
                             inner join application c on a.application_number = c.number ) select fname,
       lname from first_cs a inner join second_bms b on a.applicant_id = b.applicant_id
                inner join applicant c on a.applicant_id = c.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多