Использование IN с подзапросом - PullRequest
1 голос
/ 04 октября 2011

У меня есть две таблицы, в одной из которых есть столбец, в котором содержится идентификатор другой таблицы. Этот столбец может содержать более одного идентификатора, поэтому я сохраняю его в виде списка, например значения «1,2,3,4». Поэтому я стараюсь использовать следующее:

SELECT TableAValue
FROM TableA
WHERE TableAID IN 
(SELECT TableAID FROM TableB WHERE TableBID  = 1) 

Это возвращает только одно значение.

Теперь, если я использую:

SELECT TableAID FROM TableB WHERE TableBID  = 1

Это возвращает четыре значения. Также, если я скопирую эти четыре значения и использую:

SELECT TableAValue
FROM TableA
WHERE TableAID IN 
(1,2,3,4) 

Это вернет мне четыре значения. Это кажется чем-то очень простым, поэтому, я думаю, я либо делаю это совершенно неправильно, либо мне не хватает каких-то мелких деталей. Есть идеи?

1 Ответ

3 голосов
/ 04 октября 2011

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

Таким образом, если вместо этого у вас есть четыре записи, каждая из которых имеет различное значение в TableAID, все будет работать именно так, как вы ожидаете.*

CREATE TABLE TableB (
  TableBID INT,
  TableAID INT
)

INSERT INTO TableB
      SELECT 1, 1
UNION SELECT 1, 2
UNION SELECT 1, 3
UNION SELECT 1, 4
UNION SELECT 2, 3
UNION SELECT 2, 4
UNION SELECT 2, 5
UNION SELECT 2, 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...