Select left join: Оператор SQL LEFT JOIN: синтаксис, примеры
Содержание
sql — LEFT JOIN (SELECT) Синтаксическая ошибка в пункте
спросил
Изменено
9 лет, 11 месяцев назад
Просмотрено
9к раз
Кто-нибудь может указать мне на ошибку в этом операторе sql?
SELECT CommTypes.Description, Intro.[Percent] ОТ CommTypes ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБИРАТЬ * ОТ IntroducerBasis ГДЕ IntroducerBasis.IntroducerCode='AG' И IntroducerBasis.BasisNumber=1 ) КАК Введение ON CommTypes.ID = Intro.CommTypeID;
Ошибка указывает на последующую инструкцию SELECT как на источник ошибки.
Ошибка «Синтаксическая ошибка в пункте From»
- sql
- ms-access
9
Ну, раз вы возвращаете значение только из родительской таблицы, зачем вам вообще нужен подзапрос?
Однако попробуйте указать столбцы, а не *
в подзапросе:
SELECT CommTypes. Description ОТ CommTypes ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБИРАТЬ поле1, поле2 ОТ IntroducerBasis ГДЕ IntroducerCode='AG' AND BasisNumber=1) AS Intro ON CommTypes.ID = Intro.CommTypeID;
4
SELECT CommTypes.[Описание], Intro.[Percent] ОТ CommTypes ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБИРАТЬ * ОТ IntroducerBasis ГДЕ IntroducerBasis.IntroducerCode='AG' И IntroducerBasis.BasisNumber=1 ) КАК Введение ON CommTypes.ID = Intro.CommTypeID
Процент
— это зарезервированное ключевое слово. Если ваши поля должны называться так же, как и некоторые ключевые слова, просто заключите их в квадратные скобки, чтобы их можно было различить.
2
Я не уверен, разрешен ли такой тип присоединения к оператору select в MS-ACCESS.
Попробуйте вместо этого:
SELECT CommTypes.Description, IntroducerBasis.Percent ОТ CommTypes LEFT JOIN ON CommTypes.ID = IntroducerBasis.CommTypeID И IntroducerBasis. IntroducerCode='AG' И IntroducerBasis.BasisNumber=1;
2
Это похоже на ограничение доступа, так как создание подзапроса в доступе и присоединение к нему работает отлично.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
sql server — SQL: левое соединение, но выберите только одну строку с наименьшей датой создания
Задавать вопрос
спросил
Изменено
1 год, 6 месяцев назад
Просмотрено
8к раз
Допустим, у меня есть эта таблица:
Таблица A:
идентификатор имя --- --- 1 Джон
Таблица B:
id содержание Помощь Дата --- --- --- ---------- 100 абв 1 2017-02-03 11:16:00 101 хиз 1 03.02.2017 11:50:00
Я хочу соединить A и B так, чтобы результирующая таблица содержала только одну строку из B с датой = минимум.
Мой желаемый вывод:
id name content --- --- ------ 1 Иоанна азбука
Моя неудачная попытка присоединения также дает мне строку (1, John, xyz):
SELECT A. [id], A.[name], B.[content] ИЗ ЛЕВОЕ СОЕДИНЕНИЕ B ON A.id = B.Aid
Позже я попытался выполнить внутреннее соединение WHERE, но не смог его создать:
SELECT A.[id], A.[name] ИЗ ЛЕВОЕ СОЕДИНЕНИЕ B ON A.id = (SELECT Aid FROM B WHERE Date = (SELECT MIN(Date) FROM B ГДЕ <не знаю, куда я иду?>)
Может ли кто-нибудь указать мне правильное направление?
- sql
- sql-server
- tsql
- присоединиться к
- наибольший-n-на-группу
1
ВЫБЕРИТЕ A.[id], A.[имя],B.[содержимое] ИЗ ЛЕВОЕ СОЕДИНЕНИЕ B ON A.id = B.Aid И B.Date = (Выберите Min(Date) из B как B2, где B2.Aid=A.id)
1
Вы можете использовать левое соединение с производной таблицей:
SELECT a.ID, a.Name, b.Content Из ЛЕВОЕ СОЕДИНЕНИЕ ( SELECT aId, content, ROW_NUMBER() OVER (PARTITION BY aId ORDER BY Date) rn ИЗ б ) b ON(a.Id = b.AId И b.rn = 1)
Оконная функция row_number
будет начинаться с 1 для каждого и
с минимальной датой, поэтому вам нужно добавить условие AND b.