SQL SELECT Вопрос - PullRequest
       12

SQL SELECT Вопрос

1 голос
/ 12 июня 2011

Я пытаюсь выполнить запрос SQL, который состоит из двух частей.

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

Возможно ли это?

Я пытался:

    SELECT * FROM tablenameWHERE id= (SELECT id FROM table_of_ids WHERE 
    tableid='1a177de1-3f25c9b7910b' OR 
    tableid='64faecca-133af807a65a' OR
... up to 10 Ids)

но возвращается с ошибкой, сообщая, что подзапрос возвращает более 1 строки.

Обратите внимание, столбцы tableid и id в table_of_ids - это разные значения.

Кто-нибудь знает, как этого добиться? Кажется, я в растерянности.

Если это имеет значение, я использую mySQL и PHP.

Cheers, Brett

Ответы [ 6 ]

3 голосов
/ 12 июня 2011

Не очень оптимизированный запрос, но вы можете использовать IN вместо =

 SELECT * FROM tablename WHERE id IN (SELECT id FROM table_of_ids WHERE 
    tableid='1a177de1-3f25c9b7910b' OR 
    tableid='64faecca-133af807a65a' OR
... up to 10 Ids)
2 голосов
/ 12 июня 2011

Измените его на ()

WHERE id IN (SELECT id ...)
0 голосов
/ 12 июня 2011

Используйте ключевое слово IN.

SELECT * FROM user WHERE Id IN(SELECT userId FROM table).

Id - это первичный ключ вашей первой таблицы, а userId - это внешний ключ во второй таблице coz.

0 голосов
/ 12 июня 2011

Не используйте оператор "=", используйте оператор "IN". См. Этот учебник для примеров.

0 голосов
/ 12 июня 2011

Похоже, вы можете;

SELECT * 
FROM tablename
  INNER JOIN table_of_ids ON table_of_ids.id = tablename.id
WHERE table_of_ids.tableid IN (
  '1a177de1-3f25c9b7910b',
  '64faecca-133af807a65a',
... )
0 голосов
/ 12 июня 2011

Замените = на ключевое слово IN.

select * from sometable where key in (subselect that returns one column)
...