SQL Join 2 таблицы - PullRequest
       1

SQL Join 2 таблицы

1 голос
/ 30 ноября 2010

У меня есть две таблицы, одна с именем Person, которая содержит столбцы ID и Name, и вторая, с именем Relation, которая содержит два столбца, каждая из которых содержит ID из Person.Речь идет об отношениях между клиентом и военнослужащим.Я хотел бы объединить эти две таблицы, чтобы у меня были имена людей во всех отношениях.Можно ли написать этот запрос с каким-то объединением?

EDIT ::

Я должен сделать что-то не так, но он не работает.Я перепробовал множество форм запросов, но получал только один столбец или несколько ошибок.Это на самом деле школьное задание, у меня уже есть (с другим запросом JOIN).Сначала я пытался сделать это, но я потерпел неудачу: похоже, это очень распространенная ситуация, поэтому я не знаю, почему это слишком сложно для меня ..

Вот мои таблицы:

CREATE TABLE Oprava..(Repair) (  
  KodPodvozku INTEGER PRIMARY KEY REFERENCES Automobil(KodPodvozku),  
  IDzakaznika..(IDcustomer) INTEGER REFERENCES Osoba(ID),  
  IDzamestnance..(IDemployee) INTEGER REFERENCES Osoba(ID)  
);

CREATE TABLE Osoba..(Person) (  
  ID INTEGER CONSTRAINT primaryKeyOsoba PRIMARY KEY ,  
  Jmeno..(Name) VARCHAR(256) NOT NULL,  
  OP INTEGER UNIQUE NOT NULL  
);

Это на чешском языке, но слова в скобках после ".." являются английскими эквивалентами.PS: я использую Oracle SQL.

Ответы [ 4 ]

2 голосов
/ 30 ноября 2010

Предполагая, что ваши таблицы:

persons:   (id, name)
relations: (customer_id, serviceman_id)

Использование стандартного SQL:

SELECT p1.name AS customer_name, 
       p2.name AS serviceman_name
FROM persons p1 
     JOIN relations ON p1.id=relations.customer_id
     JOIN persons p2 ON relations.serviceman_d=p2.id;

Дальнейшее объяснение

Объединение создает следующую таблицу:

p1.id|p1.name|relations.customer_id|relations.serviceman_id|p2.id|p2.name

, где p1.id=relations.customer_id и p2.id=relations.serviceman_id. Предложение SELECT выбирает только имена из JOIN.

Обратите внимание, что если все идентификаторы из relations также находятся в persons, размер результата будет точно соответствовать размеру таблицы relations. Вы можете добавить внешний ключ , чтобы проверить это.

1 голос
/ 30 ноября 2010
SELECT *
FROM Relation
INNER JOIN Person P1
ON P1.ID = Relation.FirstPersonID
INNER JOIN Person P2
ON P2.ID = Relation.SecondPersonID
0 голосов
/ 30 ноября 2010

Персона (ID, Имя) Соотношение (ID)

Вы не упоминаете другие столбцы, которые содержит отношение, но это то, что вам нужно:

Select name
from Person as p
join Relation as r
on p.ID = r.ID

Это INNER JOIN , как и большинство других ответов здесь. Пожалуйста, не используйте это, пока не поймете, что если ни одна из записей не имеет отношения в другой таблице, она будет отсутствовать в наборе данных (т.е. вы можете потерять данные)

Очень важно понимать различные типы объединения , поэтому я бы использовал это как возможность.

0 голосов
/ 30 ноября 2010
SELECT p1.name AS customer, p2.name AS serciveman
FROM person p1, person p2, relation
WHERE p1.id=relation.customerid AND p2.id=relation.servicemanid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...