2015-05-29 4 views
-3

У меня есть 2 таблицы здесь:Выберите запись из table1, где значение от table2

table1 
id name idfrom idto 
1 test   2  3 
2 test3  1  9 

table2 
id branch status 
2 a  from 
1 b  from 
9 c  to 
3 d  to 

Как выбрать ветвь из table2 и TABLE1 на основе статуса в table2?

Я хочу, чтобы результат выглядел так:

id name  branchfrom branchto 
1 test  a   d 
2 test3 b   c 

ответ

0

Я отвечаю, что не означает, что мне это нравится.

  SELECT id, name, bfrom.branch branchfrom, bto.branch branchto 
       FROM table1 t1 
INNER JOIN (SELECT id, branch 
       FROM table2 
      WHERE status = 'from') bfrom 
       ON t1.idfrom = bfrom.id 
INNER JOIN (SELECT id, branch 
       FROM table2 
      WHERE status = 'to') bto 
       ON t1.idto = bto.id; 

Я использую INNER JOIN как образец только. Вы должны отрегулировать свое требование (которое вы четко не указали).

+0

@EKo возвращают ли этот запрос все значения? Кроме того, зачем использовать подзапрос, когда вы можете сделать прямое соединение в столбцах? – FutbolFan

+0

http://www.sqlfiddle.com/#!3/baa85/6 – FutbolFan

+0

спасибо за хед-ап, @ Непальский новичок, я исправил соединения. Я написал ответ из мобильного браузера. – tjeloep

0

Что-то вроде следующего должен делать (если вы желание присоединиться на идентификатор в обеих таблицах):

select t1.id, t1.name, f.branch as branchfrom, t.branch as branchto 
from table1 as t1 
join table2 as f 
    on f.id = t1.id 
    and f.status = 'from' 
join table2 as t 
    on t.id = t1.id 
    and t.status = 'to' 
0

Это должно работать для вас:

select t1.id, t1.name, f.branch as branchfrom, f1.branch as branchto 
from table1 as t1 
join table2 as f 
    on t1.idfrom = f.id 
join table2 as f1 
    on t1.idto = f1.id 

Пожалуйста, смотрите здесь для демо: SQL Fiddle Demo

0

Я не знаю, если это лучше или хуже, чем то, что предложили два других людей, но

select 
    t1.name, 
    (select 
    t2.branch 
    from 
    table2 t2 
    where 
    t1.idfrom = t2.id 
) as branchfrom, 
    (select 
    t2.branch 
    from 
    table2 t2 
    where 
    t1.idto = t2.id 
) as branchto 
from 
    table1 t1 

Вот fiddle

0

Используйте этот код:

CREATE TABLE #table1 (
    id int, 
    name varchar(10), 
    idfrom int, 
    idto int 

) 

CREATE TABLE #table2 (
    id int, 
    branch char, 
    statuss varchar(10) 
) 

INSERT INTO #table1 
    VALUES (1, 'test', 2, 3) 
INSERT INTO #table1 
    VALUES (2, 'test3', 1, 9) 

INSERT INTO #table2 
    VALUES (2, 'a', 'From') 
INSERT INTO #table2 
    VALUES (1, 'b', 'From') 
INSERT INTO #table2 
    VALUES (9, 'c', 'to') 
INSERT INTO #table2 
    VALUES (3, 'd', 'to') 




SELECT 
    a.id, 
    a.name, 
    (SELECT 
    b.branch 
    FROM #table2 b 
    WHERE a.idfrom = b.id 
    AND b.statuss = 'FROM') 
    AS BranchFrom, 
    (SELECT 
    b.branch 
    FROM #table2 b 
    WHERE a.idto = b.id 
    AND b.statuss = 'to') 
    AS BranchTo 
FROM #table1 a 
Смежные вопросы