MySql-从选择具有特定元素的查询中忽略数据

MySql-从选择具有特定元素的查询中忽略数据,mysql,Mysql,我有这样的疑问: mysql> SELECT -> ir.id, ir.no_surat, link.condition_id -> FROM inspection_report ir -> -> LEFT JOIN link_item_condition_ir_to_ir link -> ON link.inspection_id = ir.id -> -> WHERE ir.no_sura

我有这样的疑问:

mysql> SELECT
    -> ir.id, ir.no_surat, link.condition_id
    -> FROM inspection_report ir
    ->
    -> LEFT JOIN link_item_condition_ir_to_ir link
    -> ON link.inspection_id = ir.id
    ->
    -> WHERE ir.no_surat LIKE '%E67%'
    -> ORDER BY ir.no_surat ASC, link.condition_id DESC;

+------+---------------+--------------+
| id   | no_surat      | condition_id |
+------+---------------+--------------+
| 7561 | E6779/10/2018 |            1 |
| 7562 | E6780/10/2018 |            5 |
| 7562 | E6780/10/2018 |            1 |
| 7563 | E6781/10/2018 |            5 |
| 7563 | E6781/10/2018 |            1 |
+------+---------------+--------------+
5 rows in set (0.03 sec)
请参见
no_surat

有3个唯一的
无例外
。我的目标是:只选择没有
条件的数据\u id=5

SELECT ir.id, ir.no_surat, link.condition_id 
FROM inspection_report ir 
LEFT JOIN link_item_condition_ir_to_ir link
ON link.inspection_id = ir.id
WHERE ir.no_surat LIKE '%E67%' AND
ir.no_surat NOT IN 
 (SELECT ir.no_surat 
  FROM inspection_report ir 
  LEFT JOIN link_item_condition_ir_to_ir link
  ON link.inspection_id = ir.id 
  WHERE condition_id = 5)
ORDER BY ir.no_surat ASC, link.condition_id DESC;
我也已经试过了

mysql> SELECT
-> ir.id, ir.no_surat, link.condition_id
-> FROM inspection_report ir
->
-> LEFT JOIN link_item_condition_ir_to_ir link
-> ON link.inspection_id = ir.id
->
-> WHERE ir.no_surat LIKE '%E67%'
-> AND
-> condition_id != 5
->
-> ORDER BY ir.no_surat ASC, link.condition_id DESC;
+------+---------------+--------------+
| id   | no_surat      | condition_id |
+------+---------------+--------------+
| 7561 | E6779/10/2018 |            1 |
| 7562 | E6780/10/2018 |            1 |
| 7563 | E6781/10/2018 |            1 |
+------+---------------+--------------+
3 rows in set (0.02 sec)
但还是不行,, 请告知

我期望的结果是,忽略所有条件为5的“no_surat”列

+------+---------------+--------------+
| id   | no_surat      | condition_id |
+------+---------------+--------------+
| 7561 | E6779/10/2018 |            1 |
+------+---------------+--------------+
谢谢

这个查询怎么样:

mysql> SELECT
    -> ir.id, ir.no_surat, link.condition_id
    -> FROM inspection_report ir
    ->
    -> LEFT JOIN link_item_condition_ir_to_ir link
    -> ON link.inspection_id = ir.id
    ->
    -> WHERE ir.no_surat LIKE '%E67%'
    -> GROUP BY ir.id
    ->
    -> HAVING GROUP_CONCAT( link.condition_id ) NOT LIKE "%5%";
+------+---------------+--------------+
| id   | no_surat      | condition_id |
+------+---------------+--------------+
| 7561 | E6779/10/2018 |            1 |
+------+---------------+--------------+
1 row in set (0.00 sec)
看起来不错吧

这是小提琴:

使用此条件:

NOT EXISTS(SELECT 1 FROM link_item_condition_ir_to_ir
           WHERE inspection_id  = ir.id AND condition_id = 5)
而不是
条件\u id!=5

SELECT ir.id, ir.no_surat, link.condition_id 
FROM inspection_report ir 
LEFT JOIN link_item_condition_ir_to_ir link
ON link.inspection_id = ir.id
WHERE ir.no_surat LIKE '%E67%' AND
ir.no_surat NOT IN 
 (SELECT ir.no_surat 
  FROM inspection_report ir 
  LEFT JOIN link_item_condition_ir_to_ir link
  ON link.inspection_id = ir.id 
  WHERE condition_id = 5)
ORDER BY ir.no_surat ASC, link.condition_id DESC;
尝试下面的查询,我正在使用您的查询来获得结果

如果您想更好地查询,请共享您的数据库结构(架构):)

使用不存在

SELECT t.* from     
    (select ir.id, ir.no_surat, link.condition_id
     FROM inspection_report ir   
    LEFT JOIN link_item_condition_ir_to_ir link
    ON link.inspection_id = ir.id
     ) t where 
             NOT EXISTS ( select 1 from link_item_condition_ir_to_ir
                           t1 where t1.inspection_id=t.id and t1.condition_id=5
                         )


sql正在正常工作。详细解释您想要的输出。要么在“E6779”中给出,否则即使使用distinct,它也会给出3个结果,因为它没有distinct1不是键,有时与1,2,3,4,5组合。小提琴在这里:@FadlyDzil你期望什么output@FadlyDzil这不是您期望的输出吗?感谢您为我提供了检查查询的平台:)
id      no_surat            condition_id
7561    E6779/10/2018         1