2016-07-08 5 views
0

Я хочу собрать все данные из таблицы PROD о строках, содержащих определенные триплетные множества значений. Например, я хочу получить все данные о строках, имеющих столбцы (ID, NBR AND COP_I) со значениями (23534, 99, 0232) и (3423,5,09384) и т. Д. Я пробовал версию 1, но это только дает мне пару таких строк, когда я знаю, что должно быть 100, а версия 2 - ошибка. Я не мог придумать другого способа сделать это.Выбор строк на основе нескольких условий WHERE

Версия 1:

SELECT * FROM PROD 

WHERE 

ID IN (2534, 3423) 

AND NBR IN (99, 5) 

AND COP_I IN (0232, 09384) 

Версия 2:

SELECT * FROM PROD 

WHERE 

    (ID = '23534', NBR ='99', COP_I ='0232'), 
AND (ID = '3423', NBR ='5', COP_I ='09384') 

Update:

я в настоящее время получить что-то вроде:

ID  NBR_IN COP_I FLAG TYPE  DATE 
23534 99  0232 0  CATHAY 15-04-2017 

И не получится получить триплетный ряд (3423, 5, 09384). В основном, только некоторые из строк триплет появляются в результатах, и результаты оказываются такими же, как и то, что я получаю из Версии 1 выше.

Спасибо

ответ

1

Я думаю, вы должны использовать OR состояние.

SELECT * FROM PROD 
WHERE (ID = '23534' AND NBR ='99' AND COP_I ='0232') 
OR (ID = '3423' AND NBR ='5' AND COP_I ='09384') 
+0

I похоже, получат те же результаты, что и у меня, когда я использовал «Версию 1» в своем Вопросе. У вас есть идея, почему этот запрос не работает? – Jojo

+1

некоторые примеры данных и ожидаемый результат помогут. –

+0

Я добавил некоторые примеры данных и объяснил далее, каков мой ожидаемый результат. – Jojo

1

Ваш второй запрос шел по правильному пути, за исключением, что вам нужно заменить AND с OR и , с с AND с.

SELECT * 
FROM PROD 
WHERE 
    (ID = '23534' AND NBR ='99' AND COP_I = '0232') 
OR 
    (ID = '3423' AND NBR ='5' AND COP_I = '09384') 
+0

У меня самая странная проблема, в которой много строк, соответствующих определенным триплетам, не отображаются. Не могли бы вы подумать, почему это может быть? – Jojo

+0

@Jojo Вы уверены, что данные - это то, что вы думаете? – user1666620

+0

Мне жаль, я не слишком уверен, что вы подразумеваете под этим вопросом. – Jojo

0

Вы можете использовать запрос следующим образом:

SELECT p.* 
FROM PROD AS p 
INNER JOIN (
    SELECT 23534 AS col1, 99 AS col2, 232 AS col3 UNION ALL 
    SELECT 3423,   5,   9384 
) AS t ON p.ID = t.col1 AND p.NBR = t.col2 AND p.COP_I = t.col3 
0

в зависимости от того, сколько пар значений, которые вы, возможно, придется сделать это с, и РСУБД, вы могли бы сделать что-то вроде этого:

create table #tempThingy (ID int, NBR int, COP_I int) 

insert into #tempThingy (id, nbr, cop_i) 
select 23534, 99, 0232 
union all select 3423, 5, 09384 

select * 
from prod p 
inner join #tempThingy t on p.id = t.id 
    and p.nbr = t.nbr 
    and p.cop_i = t.cop_i 
1

Вы можете указать тройня, как это:

SELECT * FROM PROD 
WHERE (id, nbr, cop_i) IN (('23534','99','0232'), ('3423','5','09384')); 
+0

Спасибо, но этот ответ, похоже, вызывает ошибку. – Jojo

+0

Хммм. Я попробовал это в Oracle, и он отлично работает. Какие СУБД вы используете? –

+0

О, ладно. Я использую Toad Datapoint для Oracle. – Jojo

Смежные вопросы