2013-09-29 5 views
1

У меня следующая таблица:столбца Имя не соответствует в запросе

w2001

Code Name  
1  abc 
2  xyz 
3  pqr 
7  OPW 

и вторую таблицу:

w2011

Code Name 
4  abc 
2  xyz 
5  pqr 
6  MNS 

Я хотел бы следующий результат:

Code2001 Code2011 Name 
1   4  abc 
2   2  xyz 
3   5  pqr 
7   -  OPW 
-   6  MNS 

Я попробовал этот запрос:

select distinct b.name as 2001 
    from w2001 a, w2011 b 
where b.name not in (select a.name from w2001) 

Это не сработало, также пытался:

select a.code as Code2001 , b.code as Code2011 ,* 
    from w2001 a, w2011 b 
where a.name = b.name 

Но это не сработало; как мне получить результат?

+0

Считаете ли вы, что _why_ они не работали? Постскриптум Вы ищете ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ; http://dba.stackexchange.com/questions/14441/full-outer-join-in-ms-access – Ben

+0

join выражение не поддерживается ошибка –

+0

Я на 100% уверен, что MS-Access 2007 поддерживает JOIN, так что вы вероятно, увеличил его неправильно ... Если вы отредактируете свой вопрос, тогда люди смогут увидеть и помочь? – Ben

ответ

3

С другой базе данных, вы можете использовать FULL OUTER JOIN, чтобы получить результат, который вы хотите. Однако Access не поддерживает полное соединение. К счастью, вы можете UNION a LEFT JOIN с RIGHT JOIN выполнить то же самое.

SELECT 
    w2001.Code AS Code2001, 
    w2011.Code AS Code2011, 
    w2001.Name 
FROM 
    w2001 LEFT JOIN w2011 
    ON w2001.Name = w2011.Name 
UNION 
SELECT 
    w2001.Code AS Code2001, 
    w2011.Code AS Code2011, 
    w2011.Name 
FROM 
    w2001 RIGHT JOIN w2011 
    ON w2001.Name = w2011.Name; 

Два заявления SELECT аналогичны. Помимо типа соединения, другая разница заключается в том, что первая возвращает w2001.Name, а вторая возвращает w2011.Name.

+0

Этот запрос возвращает результат, который вы запросили, из ваших данных образца в Access 2007. Однако порядок строк не совпадает. Это потребует больше работы, чтобы сделать «Code2001» Null sort последним. – HansUp

1

Как и Бен, FULL OUTER JOIN - это, вероятно, то, что вам нужно. Он возвращает все строки из левой таблицы table1 и из правой таблицы table2.

Ключевое слово FULL OUTER JOIN объединяет результаты как LEFT, так и RIGHT присоединяется.

SQL FULL OUTER JOIN Синтаксис:

SELECT column_name(s) 
FROM table1 
FULL OUTER JOIN table2 
ON table1.column_name=table2.column_name 

Так что в вашем случае вы, вероятно, нуждаются в следующем:

SELECT w2001.Code AS Code2001, w2011.Code AS Code2011 
FROM W2001 
FULL OUTER JOIN W2011 
ON W2001.Name = W2011.Name 
Смежные вопросы