Проверка значения нескольких столбцов - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь получить значения col1 для определенных нескольких значений col2.Например: я хочу видеть значения col1 для значений col1 «1, 2, 3, 4» (то есть «1» в col1).Другой пример: значения col1 для col2 "1, 2" - "1, 2".Как я могу сделать это в синтаксисе SQL?

Example image

Ответы [ 3 ]

5 голосов
/ 25 марта 2012

То, что вы хотите, называется реляционное деление . Есть несколько способов сделать это. Проверьте этот вопрос, у которого есть более десяти различных решений для аналогичной проблемы, включая тесты: Как отфильтровать результаты SQL в соотношении «сквозной доступ»

Вот один из способов (предполагается, что комбинация (col1, col2) уникальна):

SELECT col1 
FROM tableX 
WHERE col2 IN (1, 2, 3, 4)
GROUP BY col1
HAVING COUNT(*) = 4            --- the size of the above list

и еще:

SELECT t1.col1 
FROM tableX AS t1
  JOIN
     tableX AS t2
         ON  t2.col1 = t1.col1
         AND t2.col2 = 2
  JOIN
     tableX AS t3
         ON  t3.col1 = t1.col1
         AND t3.col2 = 3
  JOIN
     tableX AS t4
         ON  t4.col1 = t1.col1
         AND t4.col2 = 4
WHERE t1.col2 = 1
2 голосов
/ 25 марта 2012

Вероятно, это может помочь:

SELECT col1 FROM MyTable WHERE col2 IN ('1', '2', '3', '4')

Возвращает все строки, где col2 - это "1", "2", "3" или "4".

Т.е.в приведенном выше примере приведенный выше запрос вернул бы

col1
---------
1
1
1
1
2
2

Если вы добавите DISTINCT предложение , вы получите только отдельные значения col1:

SELECT DISTINCT col1 FROM MyTable WHERE col2 IN ('1', '2', '3', '4')

Будетreturn

col1
---------
1
2

В вашем примере.

0 голосов
/ 25 марта 2012

Вы не можете делать то, что объясняете с помощью SQL. Судя по вашему комментарию:

Я хочу показать значения col1, которые "должны" иметь "1,2,3,4" в своих столбцах. В этом примере значение col1 «1» имеет значение «1,2,3,4», значение col1 «1» имеет только «1,2» в их столбце col2, поэтому с помощью этого оператора я должен видеть в качестве результата только значение «1» col1 , Тем не менее, он также дает Col1 "2" значение

Я так понимаю, что последовательности важны. Поскольку каждая строка не уникальна в зависимости от того, где она находится в вашем наборе данных, вы не можете просто сделать это с помощью SQL. Вам нужно будет загрузить свой набор данных с помощью некоторого языка программирования (C, Java, PHP ... что угодно), перебрать свой набор данных и проверить эти последовательности таким образом.

...