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