2014-12-09 2 views
2

Я искал выход как:Получить полное имя, основанный на имени пользователя 2 столбца

| BOOK |  ANALYST |   SUPERVISOR | 
|-------|----------------|--------------------| 
| BookA |   (null) |   Dani Sant | 
| BookB |   (null) | North Andre Miles | 
| BookC | Andrea Plus |  Andrea Plus | 
| BookD | Jeff Dron Math |  Jeff Dron Math | 
| BookE | Theo Phillip |  Julian Rhode | 

Что я получаю:

| BOOK |  ANALYST | SUPERVISOR | 
|-------|----------------|--------------| 
| BookA |   (null) | dani.sant | 
| BookB |   (null) | north.miles | 
| BookC | Andrea Plus | andrea.plus | 
| BookD | Jeff Dron Math | jeff.math | 
| BookE | Theo Phillip | julian.rhode | 

я могу сделать присоединиться к одной колонке, но когда я пытаюсь обоим, результат не отображается, как должен. Спасибо за любую информацию об этом.

SQL Fiddle

сервера Настройка MS SQL 2008 схемы:

CREATE TABLE books 
    (
    book varchar(10), 
    analyst varchar(100), 
    supervisor varchar(100) 
); 

INSERT INTO books (book, analyst, supervisor) 
VALUES 
('BookA', NULL, 'dani.sant'), 
('BookB', NULL, 'north.miles'), 
('BookC', 'andrea.plus', 'andrea.plus'), 
('BookD', 'jeff.math', 'jeff.math'), 
('BookE', 'theo.phil', 'julian.rhode'); 

CREATE TABLE names 
    (
    username varchar(100), 
    fullname varchar(500) 
); 

INSERT INTO names (username, fullname) 
VALUES 
('dani.sant', 'Dani Sant'), 
('north.miles', 'North Andre Miles'), 
('andrea.plus', 'Andrea Plus'), 
('jeff.math', 'Jeff Dron Math'), 
('theo.phil', 'Theo Phillip'), 
('julian.rhode', 'Julian Rhode'); 

Запрос 1:

SELECT 
    books.book AS Book, 
    names.fullname AS Analyst, 
    books.supervisor AS Supervisor 
FROM 
    books left join names on books.analyst = names.username 

Results:

| BOOK |  ANALYST | SUPERVISOR | 
|-------|----------------|--------------| 
| BookA |   (null) | dani.sant | 
| BookB |   (null) | north.miles | 
| BookC | Andrea Plus | andrea.plus | 
| BookD | Jeff Dron Math | jeff.math | 
| BookE | Theo Phillip | julian.rhode | 

ответ

2

Вам нужен второй join к names столу, чтобы получить полное имя супервизора:

SELECT b.book AS Book, bn.fullname AS Analyst, 
     sn.fullname AS Supervisor 
FROM books b left join 
    names bn 
    on b.analyst = bn.username left join 
    names sn 
    on b.supervisor = sn.username; 
1

Ниже будет обеспечивать вывод, который вы хотите.

SELECT 
     b.book AS Book, 
     n.fullname AS Analyst, 
     (SELECT fullname FROM names where username=b.Supervisor) AS Supervisor 
    FROM 
     books b left join names n on b.analyst = n.username 
Смежные вопросы