Объединение таблиц с другим идентификатором

#sql #join

#sql #Присоединиться

Вопрос:

Я хочу объединить таблицу order с таблицей invoice , поэтому я получаю ord_ref и fah_nr объединены в одном наборе результатов. Может ли кто-нибудь помочь мне с запросом?

Порядок таблиц

 ord_nr  ord_dept    ord_date    ord_customer    ord_anlegg  ord_ref
17264          7    2005-11-16  52815           2005        55
18132          7    2008-08-30  58087           2008        527
  

Счет-фактура таблицы

 fah_nr  fah_customer    fah_ordre   fah_anlegg  fah_avdeling
68903      52815        17264       2005        7
69616      53796        18132       2008        7
  

Вывод

 Ord_nr   fah_ordre      fah_anlegg  fah_nr    ord_ref
17264    17264          2005        68903      55 
18132    18132          2008        69616      527
  

Комментарии:

1. Простое объединение. Что вы пробовали?

2. Какую ошибку вы получаете? Как выглядит ваш запрос?

3. Пожалуйста, отметьте базу данных, которую вы используете

Ответ №1:

Если я правильно понял ваше требование, то вы можете искать простое объединение

 SELECT o.Ord_nr,i.fah_ordre,fah_anlegg,fah_nr,ord_ref
FROM [Order] o
INNER JOIN Invoice i ON o.ord_nr = i.fah_ordre
  

Комментарии:

1. Обратите внимание, что ПОРЯДОК — это зарезервированное ключевое слово в SQL, и поэтому это очень плохое название для таблицы. Тем не менее, его можно использовать, но требуется экранирование; в этом ответе используется [Order] который совместим с MS SQL Server. Другие диалекты SQL могут отличаться, такие как ´Order´ или "Order"

2. @MatBailie, и ANSI SQL имеет двойные кавычки, например "order" . MS SQL Server также поддерживает это.

3. Согласен с @jarlh MS SQL Server также поддерживает это — Спасибо Jarlh

4. Дело, однако, в том, что OP не указывает SQL Server и [] не поддерживается другими диалектами.

Ответ №2:

Должно быть довольно простое объединение. Просто выберите нужные значения, затем выполните левое соединение или внутреннее соединение

Вот пример с ВНУТРЕННИМ СОЕДИНЕНИЕМ

 SELECT
   Order.ord_nr AS ord_nr,
   Invoice.fah_ordre AS fah_ordre,
   Invoice.fah_anlegg AS fah_anlegg,
   Invoice.fah_nr AS fah_nr,
   Order.ord_ref AS ord_ref
FROM
   Order
INNER JOIN
   Invoice
ON
   Order.ord_nr = Invoice.fah_ordre
  

Вот пример с ЛЕВЫМ СОЕДИНЕНИЕМ

 SELECT
   Order.ord_nr AS ord_nr,
   Invoice.fah_ordre AS fah_ordre,
   Invoice.fah_anlegg AS fah_anlegg,
   Invoice.fah_nr AS fah_nr,
   Order.ord_ref AS ord_ref
FROM
   Order
LEFT JOIN
   Invoice
ON
   Order.ord_nr = Invoice.fah_ordre
  

Разница между ними заключается в том, что если запись существует только в одной из таблиц, то ЛЕВОЕ СОЕДИНЕНИЕ все равно даст вам результат, а ВНУТРЕННЕЕ СОЕДИНЕНИЕ — нет.

(Отредактировано и удалено старое неявное объединение, которое устарело)

Комментарии:

1. Не поощряйте людей использовать этот старый, неявный синтаксис объединения. Научите их выполнять явные объединения с самого начала.

2. @jarlh Вы, конечно, правы, я отредактировал свой пример и удалил устаревший пример.