Как сделать SQL-запрос, как это? - PullRequest
0 голосов
/ 05 июля 2010

Имеются 2 базовые таблицы, 1 таблица, в которой хранится связь между ними с несколькими дополнительными атрибутами; принимая несколько дополнительных значений атрибута в качестве пользовательского ввода на основе этого извлечения отношения из таблицы отношений.

Эта информация имеет идентификатор основных значений (человек и животное), а не имена. Я хочу отобразить имена на экране, как в соответствии с данными, которые вы дали для записей, которые были найдены, если у этого человека есть это животное.

    select DISTINCT table0.person_name, table5.animal_name 
      from table1

 INNER JOIN table0, table5 
        on table1.person_id=table0.person_id
            and
        table1.animal_id=table5.animal_id

where table1.aa=input1 
       and table1.bb=input2 
       and table1.cc=input3 
       and table1.dd=input4

1 Ответ

1 голос
/ 05 июля 2010

У вас есть как минимум три ошибки.

  • Предложение WHERE должно следовать за предложением JOIN .. ON, а не перед ним.
  • Нельзя ссылаться на столбцы в таблице 5, поскольку они не отображаются в списке ОТ.
  • Вы не должны писать ON xxx AND ON yyy. Просто напишите ON xxx AND yyy.

Другие вопросы для рассмотрения:

  • Вы уверены, что имели в виду FULL OUTER JOIN, а не INNER JOIN?
  • Почему вы добавляете отчетливый? Если человеку принадлежат два животных с одинаковым именем, вы действительно хотите вернуть только один ряд?
  • Откуда берутся значения input1, ..., input4? 1023 *
  • Я думаю, table0 следует переименовать в person, table5 в animal и table1 в person_animal, чтобы было легче понять назначение каждой таблицы.

Мое лучшее предположение относительно того, что вы имели в виду, это:

SELECT table0.person_name, table5.animal_name 
FROM table1 
JOIN table0 ON table1.person_id = table0.person_id
JOIN table5 ON table1.animal_id = table5.animal_id
WHERE table1.aa = input1 
  AND table1.bb = input2 
  AND table1.cc = input3 
  AND table1.dd = input4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...