【问题标题】:Fetch record from 1st table which are not in 2nd table mysql从第一个表中获取不在第二个表mysql中的记录
【发布时间】:2019-12-05 15:40:09
【问题描述】:

我在这两个mysql表中有以下记录。

表-A

       Question_No 
           1
           2
           3
           4
           5

表-B

Roll_No  Question_No  Ans_Option
 1001      1         NULL 
 1001      2         D
 1001      3         NULL
 1002      1         C
 1002      2         NULL 

这里“NULL”这个词被显式插入到 column 中,没有什么可混淆的。

如何通过mysql查询显示如下结果?

       Questions not attempted by roll no 1001 are : 1, 3, 4, 5 
       Questions not attempted by roll no 1002 are : 2, 3, 4, 5 

我尝试使用以下代码但无法正常工作

select distinct a.* from table_A a NATURAL LEFT JOIN table_B b where 
b.Question_No IS NULL and b.Roll_No=1001;// where I am wrong here ? I have 
not set any column as primary key , should I set?

非常感谢提前

【问题讨论】:

    标签: mysql sql join where-clause


    【解决方案1】:

    当您将WHERE 条件放在LEFT OUTER JOIN 上时,它实际上与INNER JOIN 相同:

    select distinct a.* 
    from table_A a 
    NATURAL LEFT JOIN table_B b 
    where b.Question_No IS NULL 
      and b.Roll_No=1001;  -- this condition makes it `NATURAL JOIN`
    

    你可以改写成:

    SELECT DISTINCT a.*
    FROM table_A a
    LEFT JOIN table_b b
      ON a.Question_No = b.Question_No
     AND b.Roll_No=1001
    WHERE b.Ans_Option_No IS NULL
    

    db<>fiddle demo

    【讨论】:

    • 感谢您的帮助,但我得到了第 1001 卷的值:3、4、5,我怎样才能得到 1、3、4、5?
    • @Tom WHERE b.Ans_Option_No IS NULL1
    • 好的,我该如何添加“b.Question_No is NULL”以及您之前编写的上述代码?
    • 嗨,我没有收到 Ans_No 包含 NULL 值的问题,我收到的问题是 3、4、5 但不是 1、3、4、5
    • @Tom 你运行代码了吗? dbfiddle.uk/…
    【解决方案2】:

    使用cross join 生成行,然后将它们过滤掉:

    select r.roll_no, b.Question_No
    from (select distinct roll_no from b) r cross join
         a left join
         b
         on b.roll_no = r.roll_no and b.Question_No = a.Question_No
    where b.roll_no is null;
    

    这会得到b不是的问题。

    【讨论】:

    • 非常感谢您帮助我...这个查询结果会更快还是 Lukasz 提供的解决方案?
    • @Tom 。 . .他们实现不同的逻辑。我认为这是您真正想要的版本。
    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 2018-07-11
    • 2019-11-15
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多