2011-04-17 2 views
0

Это мой запросОбъединение 2 таблицы

SELECT Testcases.Testcase, Tests.Result 
FROM Testcases LEFT JOIN Tests ON Tests.TestCaseID=Testcases.ID 
WHERE Tests.Release="1.1.111"; 

Однако, то, что я хочу, чтобы получить все строки в Testcases, независимо от того, если Tests.TestCaseID=Testcases.ID. Для каждой строки в тестах есть одна строка в Testcases для данного номера выпуска.

Образцы:

Testcases table 
--------------- 
ID Testcase 
1 TC-1 
2 TC-5 
3 TC-8 

Tests table 
----------- 
ID TestCaseID Result Release 
1 1   OK  1.1.111 
2 3   FAIL 1.1.111 

То, что я хочу получить является

Testcase Result 
TC-1  OK 
TC-5  <empty> 
TC-8  FAIL 

ответ

0

Если Tests.TestcaseID не равен Testcases.ID, то это не присоединиться. Вы пытаетесь получить декартово произведение?

Если вы просто хотите, чтобы все строки в Testcases, то просто сделайте SELECT * из TESTCASES.

Непонятно, что вы хотите - почему бы вам не привести пример таблицы из 3 рядов?

+0

Обновленный оригинальный пост. – Pablo

-1

, наконец, это сработало для меня, попробуйте.

SELECT Testcases.Testcase, Tests.Result 
FROM Testcases LEFT OUTER JOIN Tests ON Tests.TestCaseID=Testcases.ID 
WHERE Tests.Release="1.1.111" 
+0

nop, это дало мне все комбинации тестовых ящиков ... – Pablo

+0

Отредактировано. Это должно получиться так, как вы хотите, вы его протестировали? –

+0

Да, он дает мне строки TC-1, TC-1, TC-1, TC-2, TC-2, TC-2, ... вместо этого он должен давать TC-1, TC-2, TC-3. пожалуйста, см. мой оригинальный пост – Pablo

1

Затем вы должны использовать внешнее соединение:

SELECT tc.Testcase, t.Result 
FROM Testcases as tc, 
LEFT OUTER JOIN Tests as t 
ON Tests.TestCaseID=Testcases.ID 
WHERE Tests.Release="1.1.111"; 
+0

Доступ не нравится 'as', но даже после замены не получили ВСЕ записи из таблицы Testcase. Я обновил оригинальное сообщение, чтобы быть более понятным – Pablo

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