Подзапрос внутри предложения IN - PullRequest
2 голосов
/ 27 февраля 2012

У меня работает следующий запрос:

SELECT DISTINCT table1.field1, table1.field2
FROM table1
WHERE table1.field3 IN (1,2,3)

Результат:

 field1 field2
 Data1  60
 Data2  61
 Data3  62

И следующий запрос дает мне только первую строку, когда он должен дать тот же результат, что и первый запрос.

SELECT DISTINCT table1.field1, table1.field2
FROM table1
WHERE table1.field3 IN (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100)

Результат:

 field1 field2
 Data1  60

Если я выполню subquery (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100), результат будет «1,2,3», точно так же, как первый запрос.

Что мне не хватает?

1 Ответ

9 голосов
/ 27 февраля 2012

Что вам не хватает, так это то, что строка со значением '1,2,3' не является списком из трех целых чисел.Это одна строка.

Если вы хотите, чтобы x IN (SELECT y FROM z) вел себя так же, как x IN (1,2,3), тогда ваш подзапрос должен вернуть три элемента со значениями 1, 2 и 3.

В сети есть функции Split () , которые принимают строку и возвращают набор записей, состоящий из нескольких целых чисел.И это может исправить вашу проблему.

Но тот факт, что у вас есть одна запись с одним полем, содержащим несколько значений, является признаком более глубокой проблемы.Вы никогда не должны хранить несколько значений в реляционной базе данных как одну строку.Вместо этого сохраните несколько записей или несколько полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...