Вопрос подзапроса - PullRequest
1 голос
/ 08 июня 2011

У меня есть таблица данных, которая содержит 3 столбца, которые ссылаются на идентификаторы другой таблицы.

table1: id, person1_id, person2_id, person3_id

люди: id, fname, lname

Какой самый эффективный способ вернуть fname вместо person1_id в моем запросе?

Ответы [ 5 ]

2 голосов
/ 08 июня 2011
SELECT
  a.id,
  x.fname,
  y.fname,
  z.fname
FROM
  table1 a
  INNER JOIN people x ON x.id = a.person1_id
  INNER JOIN people y ON y.id = a.person2_id
  INNER JOIN people z ON z.id = a.person3_id
1 голос
/ 08 июня 2011

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

Попробуйте это:

SELECT 
  id,
  (SELECT fname FROM people WHERE id = person1_id) as Person1_fname,
  (SELECT fname FROM people WHERE id = person2_id) as Person2_fname,
  (SELECT fname FROM people WHERE id = person3_id) as Person3_fname
FROM
  table1

Это даст вам все записи в таблице 1 и «заменит» идентификаторы именами, например:

1, George, Chris, Judy
2, Sam, Jennifer, Sara

С таблицей1

1, 1, 2, 3
2, 4, 5, 6

и таблица людей

1, George, Carlin
2, Chris, Rock
3, Judy, Smith
4, Sam, Elliot
5, Jennifer, Garner
6, Sara, Johnson

Я предполагаю, что есть также уникальное ограничение для people.id. Если нет, вы захотите поставить TOP 1 перед fname в запросах 3 полей.

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

Не уверен, хорошо ли я понял вопрос, но:

SELECT table2.data1 FROM table1 INNER JOIN table2 WHERE table1.o1=table2.id
0 голосов
/ 08 июня 2011

Я думаю, это может вам помочь. я взял table1 в качестве образца

SELECT sample.*,person.fname,p.fname FROM sample left join person on sample.p1=person.id, sample s left join person p on s.p2=p.id group by sample.id
0 голосов
/ 08 июня 2011

Вы имели в виду что-то вроде этого:

SELECT table1.id, table2.data1 FROM table1 LEFT JOIN table2 ON table1.o1 = table2.id; 

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