#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 Вы, конечно, правы, я отредактировал свой пример и удалил устаревший пример.