2016-11-11 3 views
2

Можно ли объединить эти два оператора в один запрос?SQL Check for Duplicate Records с двумя ключами

Существует два столбца (a_id и b_id), из-за которых другие 2 столбца должны быть неактивными.

SELECT * FROM cases WHERE a_id=:a_id AND case_form=:case_form AND case_type=:case_type 

SELECT * FROM cases WHERE b_id=:b_id AND case_form=:case_form AND case_type=:case_type 

..если любых возвращенных результатов оповещения пользователя дублировать случай

+0

Используйте оператор OR или UNION? Но, возможно, я не понимаю, могли бы вы разместить некоторые данные образца с ожидаемыми результатами? Итак ... вы хотите вернуть все вхождения, где case_form и case_type дублируются в a_id и B_Id? – xQbert

ответ

4

Два быстрых подхода:

SELECT * FROM cases WHERE a_id=:a_id AND case_form=:case_form AND case_type=:case_type 
UNION ALL 
SELECT * FROM cases WHERE b_id=:b_id AND case_form=:case_form AND case_type=:case_type 

или (не каламбур!)

SELECT * FROM cases 
WHERE (a_id=:a_id AND case_form=:case_form AND case_type=:case_type) 
    OR (b_id=:b_id AND case_form=:case_form AND case_type=:case_type) 
2

Вы можете союз

SELECT * FROM cases WHERE a_id=:a_id AND case_form=:case_form AND case_type=:case_type 
UNION ALL 
SELECT * FROM cases WHERE b_id=:b_id AND case_form=:case_form AND case_type=:case_type 

или вы можете использовать ИЛИ

SELECT * FROM cases 
WHERE (a_id=:a_id OR b_id=:b_id) 
AND case_form=:case_form AND case_type=:case_type 
+0

Это действительно лучше, поскольку упрощает предложение where на примере или примере; хотя союз должен быть союзом, все, что я думаю, поэтому вы не принимаете отчетливый удар производительности. – xQbert

+0

@xQbert. правильный для союза все .. – scaisEdge

+0

@ xQbert ответ восстановлен .. спасибо .. (я удалил .. Потому что было странно ситуация .. и я думал, почему.) .. upvote для любезности – scaisEdge