2016-03-02 4 views
2

У меня есть эта таблицаполе выбора нескольких индексов столбца

recept_id raavare_id nom_netto tolerance 
     1   1  10  0.1 
     1   2   2  0.1 
     1   5   2  0.1 
     2   1  10  0.1 
     2   3   2  0.l 
     2   5  1.5  0.1 
     2   6  1.5  0.1 
     3   1  10  0.1 
     3   4  1.5  0.1 
     3   5  1.5  0.1 
     3   6   1  0.1 
     3   7   1  0.1 

Я пытаюсь выбрать строку, в которой raavare_id равно 6 и 7. Так что я пытаюсь выбрать строку, где recept_id является равным 3.

Пробовал, но очевидно, что это не работает потому что вы не можете выбрать поле с 2 значениями:
SELECT * FROM table_name WHERE raavare_id="6" AND raavare_id="7"

Это не работает либо, так как он будет выбирать другие строки, как recept_id=2 потому, что он имеет raavare_id=6, но я хочу, чтобы выбрать строку (ы), где ОБА raavare_id равно 6 и 7 и имеет тот же recept_id:
SELECT * FROM table_name WHERE raavare_id="6" OR raavare_id="7"

EDIT:

Забыл упомянуть, что мне не разрешено использовать recept_id в sql-запросе. Мне нужно выбрать строку, где raavare_id - 6 и 7, и оба имеют тот же recept_id. Но recept_id не должен быть в запросе.

+0

try 'IN' operator,' SELECT * FROM table_name WHERE raavare_id IN (6,7) ' –

+0

Не могли бы вы уточнить, что * request_id не должен быть в запросе *. Разве вы не хотите использовать его в предложении WHERE? И в чем причина этого? –

+0

Да, я не хочу использовать его в предложении where. Потому что это то, что я хочу получить от запроса, поэтому нет смысла использовать его в предложении where. – 131

ответ

1

Вы можете сделать это с IN, групповые и имеющий пункт:

SELECT * FROM YourTable 
WHERE recept_id in(SELECT recept_id 
        FROM YourTable 
        WHERE raavare_id in('6','7') 
        GROUP BY recept_id 
        having count(distinct raavare_id) = 2) 

Или с существует()

SELECT * FROM YourTable t 
WHERE exists(SELECT 1 
      FROM YourTable s 
      WHERE t.recept_id = s.recept_id and s.raavare_id in('6','7') 
      GROUP BY s.recept_id 
      having count(distinct s.raavare_id) = 2) 
3

Попробуйте это:

SELECT * 
FROM table_name 
WHERE recept_id IN (
    SELECT recept_id 
    FROM table_name 
    WHERE raavare_id IN (6,7) 
    GROUP BY raavare_id 
    HAVING COUNT(DISTINCT raavare_id) = 2) 

Подзапрос используется оператором IN возвращает recept_id =3, потому что это значение идентификатора, который принадлежит к группе, имеющей raavare_idоба (6, 7) значения.

Edit:

Если вы хотите, чтобы получить значение recept_id, а затем просто использовать подзапрос:

SELECT recept_id 
FROM table_name 
WHERE raavare_id IN (6,7) 
GROUP BY raavare_id 
HAVING COUNT(DISTINCT raavare_id) = 2 
+0

Спасибо большое: D – 131

+0

Он ничего не ответил:/ – 131

+0

@ahmadalbayati Что такое тип данных 'raavare_id'? –

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