如何从查询表中排除记录?

时间:2019-01-25 09:44:54

标签: mysql

我有一个名为BDS.cursuri的表,该表具有列"id_cadru", "tip_curs"。记录示例:

我已经尝试过了:

id_cadru    tip_curs   
   8         modul I
   5         modul II
   8         modul III
   6         modul III      

SELECT BDS.cursuri.ID_CADRU FROM BDS.cursuri,
    (SELECT * FROM BDS.cursuri where TIP_CURS = "modul I") AS cu_m1
    where BDS.cursuri.ID_CADRU NOT IN (cu_m1.ID_CADRU);

我期望输出5和6,这意味着没有tip_curs='modul I'的记录,因为拥有id_cadru=8的人已经有了tip_curs='modul I',但是我也得到了输出8。我该如何解决?谢谢。

5 个答案:

答案 0 :(得分:0)

我们可以在此处尝试使用EXISTS子句:

SELECT t1.id_cadru, t1.tip_curs
FROM BDS.cursuri t1
WHERE NOT EXISTS (SELECT 1 FROM BDS.cursuri t2
                  WHERE t1.id_cadru = t2.id_cadru AND t2.tip_curs = 'model I');

答案 1 :(得分:0)

您应该在不加入联接的子查询中使用NOT IN

SELECT BDS.cursuri.ID_CADRU 
FROM BDS.cursuri 
    where BDS.cursuri.ID_CADRU NOT IN (
      SELECT id  FROM BDS.cursuri where TIP_CURS = "modul I"
    );

或对同一子查询使用不存在子句

答案 2 :(得分:0)

尝试以下查询

SELECT BDS.cursuri.ID_CADRU 
FROM BDS.cursuri 
    where BDS.cursuri.ID_CADRU != (
      SELECT ID_CADRU FROM BDS.cursuri where TIP_CURS = "modul I"
    );

答案 3 :(得分:0)

尝试一下

它将返回id_cadru 5,6,8modul IImodul III

  

从BDS.cursuri中选择id_cadru,tip_curs,其中id_cadru位于(选择   与BDS.cursuri截然不同(id_cadru),其中tip_curs进入('modul   II','modul III')

答案 4 :(得分:0)

您可以使用以下查询来实现

  

选择*     来自BDS.cursuri     id_cadru不在的位置(从BDS.cursuri中选择id_cadru,tip_curs ='调制I')     并且tip_curs不输入(“调制I”)

如果您有任何困惑,可以问here

希望会有所帮助。