2015-04-22 6 views
-4

Мне нужна колонка, удовлетворяющая нескольким условиям. В запросе ниже, где у меня есть A.Col3 IN ('1', '2', '3'), это будет соответствовать записям, где у меня есть любые этих значений в Col3. Мне нужны результаты, в которых я могу сопоставить все этих значений: где я могу найти записи таблицы А для объединения, которые соответствуют '1', '2', и '3'.sql где для одного столбца несколько условий

SELECT A.Col1, B.LoginID, A.Col3 
FROM 
    TableA A, 
    TableB B 
    WHERE A.Col4 = '2015' 
     AND A.Col5 = '12' 
     AND A.Col3 IN 
     ('1','2','3') 
     AND A.Col6 IN 
     (SELECT col7 
      FROM TableB 
      WHERE Col8 = ' ') 
     AND A.Col6 = B.col9 
     AND B.LoginID IS NOT NULL 
     GROUP BY Col6 
     HAVING COUNT(*) = 2 
     ; 

я пытаюсь увидеть в A.col3 имеет 3 вида значений - 1 2 и 3 в таблице [для A.Col1]

+0

Если вам нужен «loginid» человека, почему бы вам не выбрать его в запросе? Другими словами, ваш вопрос не имеет смысла. Запрос и текст не совпадают. Еще раз, образцы данных и желаемые результаты значительно упрощают вопросы. –

+0

ч Гордона, B.Col2 ЯВЛЯЕТСЯ LOGIN Ид .. я просто не отправлял публично в запросе Regrets Как - col1 имеет 3 типа col3 Col1 Col3-2 3 Col1 может иметь только 1 или 2 или 3 .. Но мне нужен только Col1, у которого есть все три значения Col3 1 2 и 3 – user4316592

+2

. Я бы предположил, что вы исправите вопрос, чтобы он имел смысл (для этого используется кнопка «edit»). В противном случае вы можете начать получать голоса для закрытия. –

ответ

0

Вопрос не хватает какой-то информации, поэтому я могу только объясните, как решить это в общих чертах. Допустим, у вас три таблицы: Orders, OrderLines и Products. В таблице Orders есть поля для ID (автоинкремент/первичный ключ), а также данные, которые здесь не важны. Таблица OrderLines имеет столбцы для OrderID, ProductID, а также поля Price и Qty, которые также не будут использоваться здесь.

Если я правильно понял ваш вопрос, вы хотите найти Orders, у которого есть линии для продуктов 1, 2 и 3. Вы используете разные объекты, но основная структура таблицы должна соответствовать тому, что вы пытаетесь сделать, и поэтому методы решения проблемы будут одинаковыми. Вы можете сделать это так:

SELECT DISTINCT o.* 
FROM Orders o 
INNER JOIN OrderLines l1 on l1.OrderID = o.ID AND l1.ProductID = '1' 
INNER JOIN OrderLines l2 on l2.OrderID = o.ID AND l2.ProductID = '2' 
INNER JOIN OrderLines l3 on l3.OrderID = o.ID AND l3.ProductID = '3' 

Вы можете также сделать исключения присоединиться к для записей не есть один из пунктов в списке:

SELECT o.ID 
FROM Orders o 
LEFT JOIN OrderLines l on l.OrderID = o.ID AND l.ProductID IN ('1','2','3') 
GROUP BY o.ID --list all columns needed in the select list here 
HAVING COUNT(*) = 3 

Эта опция легче написать (и может работать лучше), если список ProductID может быть длинным или динамическим, но предполагает, что у вас не будет более одной OrderLine для данного продукта в заказе.

+0

Спасибо, Тон! .. – user4316592

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