внутреннее объединение для запроса? - PullRequest
2 голосов
/ 04 апреля 2011

Я хочу сделать SQL-запрос и у меня возникли некоторые проблемы:

  1. Я хочу выбрать из таблицы_1 идентификатор, где parent_id - это значение, которое у меня есть:

    SELECT ID 
      FROM table_1 
     WHERE parent_ID = 'x'
    
  2. Я хочу использовать идентификаторы, которые я получил в 1. и

    SELECT 
      FROM table_2 
     WHERE ID = 'The ID's from Query 1.'
    

Ответы [ 5 ]

5 голосов
/ 04 апреля 2011

Как это?

select ...
  from table_1 a
  join table_2 b on(a.id = b.id)
 where a.parent_id = 'x';

Редактировать
Примечание: запрос может привести к дублированию строк в зависимости от ключей и отношения между таблицами.Например, вы получите дубликаты, если для данного table_1.parent_id = X может быть несколько вхождений одного и того же table_1.ID.Другим примером является случай, когда table_2.ID не является уникальным.

В этих случаях вы хотели бы удалить дубликаты (используя отличные, сгруппированные, разделенные @row_number и т. Д.) или , а несначала создайте дубликаты, используя вместо этого полусоединение (существует, в).Посмотрите ответ @OMG Ponies для справки.

4 голосов
/ 04 апреля 2011

Использование IN

SELECT t2.*
  FROM TABLE_2 t2
 WHERE t2.id IN (SELECT t1.id
                   FROM TABLE_1 t1
                  WHERE t1.parent_id = 'x')

Использование EXISTS

SELECT t2.*
  FROM TABLE_2 t2
 WHERE EXISTS (SELECT NULL
                 FROM TABLE_1 t1
                WHERE t1.id = t2.id
                  AND t1.parent_id = 'x')

Использование INNER JOIN

DISTINCT (или GROUP BY) необходимо для устранения дубликатов, еслив TABLE_1 имеется более одной записи, относящейся к записи в TABLE_2:

SELECT DISTINCT t2.*
  FROM TABLE_2 t2
  JOIN TABLE_1 t1 ON t1.id = t2.id
                 AND t1.parent_id = 'x'
1 голос
/ 04 апреля 2011

Это можно решить с помощью IN следующим образом:

SELECT * FROM table_2 WHERE ID IN (SELECT ID FROM table_1 WHERE parent_ID = 'x')
0 голосов
/ 16 ноября 2011

Да, вам лучше использовать это:

SELECT [value]
  FROM [table2]
 WHERE [value] IN (SELECT [value] 
                     FROM [table1]
                    WHERE [value] = "[value]"
                  )
0 голосов
/ 04 апреля 2011
select * from table_2 where id in (select id from table_1 where parent_id = 'x')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...