Sql Join Query с использованием MS Access - PullRequest
0 голосов
/ 26 ноября 2010

Здравствуйте. У меня проблема с получением строк из одной таблицы после сравнения обеих.Детали обеих таблиц выглядят следующим образом: -

Я использую базу данных Ms Access.

TableA is having a data of numeric type (Field Name is A it is primary key)
----------
 Field A
==========
  1
  2
  3
  4
  5

Table B is having data of numeric type ( Field Name is A it is foreign key)
--------
Field A
========
  2
  4

Теперь я использую следующий запрос:

select a.a 
    from a a
        , b b 
    where a.a <> b.b

Iхочу показать все данные из таблицы A, которые не равны таблице B. Но приведенный выше запрос не работает, как я описал.

Можете ли вы помочь мне в этом отношении?

С уважением,

Фавад Мунир

Ответы [ 5 ]

1 голос
/ 26 ноября 2010

Для ясности я использовал верхний регистр для таблиц и нижний регистр для полей:

Select A.a
FROM A LEFT OUTER JOIN B ON A.a=B.b
WHERE B.b is null

Это покажет все записи в A, которые не находятся в B (я предполагаю, что это то, чтовы хотите).

Читайте на Access внешних объединений.В конструкторе запросов дважды щелкните соединение и выберите что-то вроде «все записи из таблицы a и только соответствующие записи в таблице b».

0 голосов
/ 26 ноября 2010

Если я вас правильно понимаю, вы хотите видеть каждую строку в A, для которой столбец a содержит значение, которое не может быть найдено ни в одном из значений столбца b B. Вы можете получить эти данные несколькими способами.

Я думаю, что использование NOT IN - самое ясное, лично:

 SELECT * FROM tableA WHERE columnA NOT IN 
   (SELECT columnB FROM tableB WHERE columnB IS NOT NULL)

Многие люди предпочитают отфильтрованные JOIN:

 SELECT tableA.* FROM tableA LEFT OUTER JOIN tableB
    ON tableA.columnA = tableB.columnB WHERE tableB.columnB IS NULL

Существует также вариант НЕ СУЩЕСТВУЮЩИЙ:

 SELECT * FROM tableA WHERE columnA NOT EXISTS
   (SELECT * FROM tableB WHERE columnB = tableA.columnA)
0 голосов
/ 26 ноября 2010

Не совсем ясно, чего вы пытаетесь достичь, но звучит так, будто вы пытаетесь решить общую проблему поиска строк в таблице A, в которой отсутствуют связанные данные в таблице B. Если это так, то, похоже, вы неправильно понялисемантика соединения вы пробовали.В этом случае у вас есть 2 проблемы, потому что понимание операции JOIN имеет решающее значение для работы с реляционными базами данных.

В связи с первой проблемой, пожалуйста, изучите, как выразить подзапрос с помощью оператора IN.Что-то вроде

...  WHERE a NOT IN (SELECT a from b)

Что касается второй проблемы, попробуйте выполнить свой запрос без ограничения WHERE и посмотрите, что возвращается.Как только вы поймете, что делает объединение, вы поймете, почему применение ограничения WHERE к нему не решит вашу проблему.

0 голосов
/ 26 ноября 2010

Я не знаю точно, примет ли Access синтаксис, но вот как я бы поступил в SQL Server.

select a.a
    from TableA a
    where a.a NOT IN (
        select b.a
            from TableB b                
    )

или даже как указано выше:

select a.a
    from TableA a
        left outer join TableB b on b.a = a.a
    where b.a IS NULL
0 голосов
/ 26 ноября 2010

В своем вопросе вы сказали, что имя поля в таблице B - «A». Учитывая это, я бы сказал, что ваш запрос должен выглядеть примерно так:

select a.a
  from a, b
  where a.a <> b.a

Но я не уверен, что это будет делать то, что вы хотите. Я думаю вы пытаетесь найти строки в таблице A, у которых нет соответствующей строки в таблице B, и в этом случае вы можете попробовать

SELECT A.A
  FROM A
LEFT OUTER JOIN B
  ON (B.A = A.A)
WHERE B.A IS NULL

Попробуйте и посмотрите, будет ли это то, что вы хотите.

Делись и наслаждайся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...