2015-10-01 2 views
1

Мой первый запрос ...SQL - Объединение нескольких таблиц выбирает/

SELECT 
    t1.a, t1.b, t1.c, 
    t2.a, t2.b, t2.c 

FROM t1 

LEFT JOIN t2 ON t1.a = t2.a 

WHERE t1.b = '000000' 

AND LENGTH(t1.a) > '5' 

AND t1.c <> 'Y'; 

Мой второй запрос ...

SELECT 
    t1.a, 
    t3.b as testMe 

FROM t1 

LEFT JOIN t3 ON t1.a = '0' + LEFT(t3.a, 5) 

WHERE t1.a = '017941'; 

Оба этих запросов прекрасно работают сами по себе, но мне они нужны в сочетании в один результирующий набор. Стоит отметить, что предложение where во втором запросе существует для целей тестирования, но когда я удаляю его, все происходит сбой. Не уверен, что это означает, что мне нужно что-то фильтровать, или это тайм-аут? Я использую базу данных Pervasive.

Мой запрос не удалось ...

SELECT 
    t1.a, t1.b, t1.c, 
    t2.a, t2.b, t2.c, 
    t3.b as testMe 

FROM t1 

LEFT JOIN t2 ON t1.a = t2.a 

LEFT JOIN t3 ON t1.a = '0' + LEFT(t3.a, 5) 

WHERE t1.b = '000000' 

AND LENGTH(t1.a) > '5' 

AND t1.c <> 'Y'; 

Я замкнута мой код, чтобы лучше показать, что я собираюсь, но фактический код можно найти здесь: http://codeshare.io/A2aB9

+0

Что не работает? –

+0

Какая ошибка вы получаете? – Mureinik

+0

, пожалуйста, будьте более конкретными - какова ваша РСУБД, что такое «она», которая рушится? – Kritner

ответ

0

Вы можете попробовать используйте эти два набора в качестве подзаголовков и объедините их вместе. Я вытащил ваше условие соединения между двумя запросами как отдельный столбец, чтобы сохранить testMe в результирующем наборе.

SELECT * 
FROM (SELECT t1.a t1_a 
       , t1.b t1_b 
       , t1.c t1_c 
       , t2.a t2_a 
       , t2.b t2_b 
       , t2.c t2_c 
     FROM t1 
     LEFT JOIN t2 
       ON t1.a = t2.a 
     WHERE t1.b = '000000' 
       AND LENGTH(t1.a) > '5' 
       AND t1.c <> 'Y') a 
LEFT JOIN (SELECT t1.a t1_a 
        , t1.b t1_b 
        , t1.c t1_c 
        , t3.a t3_a 
        , t3.b t3_b 
        , '0' + LEFT(t3.c, 5) t3_c 
        , LEFT(t3.c, 5) AS testMe 
      FROM  t1 
      LEFT JOIN t3 
        ON t1.a = '0' + LEFT(t3.c, 5)) b 
     ON a.t1_a = c.t3_c; 
+0

Я пробовал делать это, и он ничего не делал. Однако, спасибо. – Slime

+0

Можете ли вы уточнить? Не вернули ли строки? Он вернул неправильные строки? – Vinnie

+0

http://codeshare.io/A2aB9 показывает мой фактический код. В самом низу вашей линии у вас есть 'c.t3_c', который, я думаю, должен был быть' b.t3_c', но в любом случае я получаю синтаксическую ошибку, и он показывает 'ON a.job_header. < Slime

Смежные вопросы