Почему я получаю ошибку идентификатора из нескольких частей в SQL? - PullRequest
0 голосов
/ 17 февраля 2009

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

SELECT * FROM passenger
INNER JOIN [passenger-flylist] ppff 
ON ppp.[passenger-id] = ppff.[passenger-id]

Ошибка:

Сообщение 4104, Уровень 16, Состояние 1, Строка 1
Не удалось связать идентификатор из нескольких частей «ppp.passenger-id».

Таблицы:

CREATE TABLE [dbo].[passenger](
    [passenger-id] [int] IDENTITY(1,1) NOT NULL,
    [name] [char](50) COLLATE Arabic_CI_AS NOT NULL,
    [sex] [char](10) COLLATE Arabic_CI_AS NULL,
    [mobile] [char](20) COLLATE Arabic_CI_AS NULL,
    [address] [varchar](50) COLLATE Arabic_CI_AS NULL,
    [flylist-id] [int] NOT NULL,
    [chair-number] [char](10) COLLATE Arabic_CI_AS NOT NULL,
    [Age] [char](10) COLLATE Arabic_CI_AS NULL,
    [ticket-number] [char](10) COLLATE Arabic_CI_AS NULL,
 CONSTRAINT [PK_passenger] PRIMARY KEY CLUSTERED 
(
    [passenger-id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

Второй

CREATE TABLE [dbo].[flylist](
    [flylist-id] [int] IDENTITY(1,1) NOT NULL,
    [fly-number] [varchar](50) COLLATE Arabic_CI_AS NOT NULL,
    [go-date] [char](15) COLLATE Arabic_CI_AS NOT NULL,
    [return-date] [char](15) COLLATE Arabic_CI_AS NOT NULL,
    [go-time] [char](5) COLLATE Arabic_CI_AS NOT NULL,
    [return-time] [char](5) COLLATE Arabic_CI_AS NOT NULL,
    [start-from] [varchar](50) COLLATE Arabic_CI_AS NOT NULL,
    [destination] [varchar](50) COLLATE Arabic_CI_AS NULL,
    [airline-company-id] [int] NOT NULL,
    [airplane-id] [int] NOT NULL,
 CONSTRAINT [PK_flylist] PRIMARY KEY CLUSTERED 
(
    [flylist-id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

Третий

CREATE TABLE [dbo].[passenger-flylist](
    [passenger-id] [int] NOT NULL,
    [flylist-id] [int] NOT NULL,
 CONSTRAINT [PK_passenger-flylist] PRIMARY KEY CLUSTERED 
(
    [passenger-id] ASC,
    [flylist-id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
USE [AirlineSx]
GO
ALTER TABLE [dbo].[passenger-flylist]  WITH CHECK ADD  CONSTRAINT [FK_passenger-flylist_passenger-flylist] FOREIGN KEY([passenger-id], [flylist-id])
REFERENCES [dbo].[passenger-flylist] ([passenger-id], [flylist-id])

Если у меня возникла проблема с установлением отношений, скажите, пожалуйста, как это сделать

спасибо

Отредактированная часть

Спасибо, я обнаружил, что параллельно с вами, но я получил еще одну ошибку: (В моем реальном коде я хочу получить идентификатор пассажира, но он не позволяет мне)

SELECT [passenger-id] FROM passenger ppp -- <<<< This line
INNER JOIN [passenger-flylist] ppff 
ON ppp.[passenger-id] = ppff.[passenger-id]
INNER JOIN flylist fff ON ppff.[flylist-id] = fff.[flylist-id]
WHERE ppp.[name] = @name AND
fff.[start-from] = @flightDate AND
ppp.[ticket-number] = @ticketNo

Ошибка:

Сообщение 209, Уровень 16, Состояние 1, Процедура SearchForPassenger, строка 19
Неоднозначное имя столбца «идентификатор пассажира».

Относится к 1-й строке, которую мы хотим выбрать [идентификатор пассажира]

Ответы [ 2 ]

9 голосов
/ 17 февраля 2009

Проблема в отсутствии псевдонима ppp

SELECT * FROM passenger ppp
INNER JOIN [passenger-flylist] ppff 
ON ppp.[passenger-id] = ppff.[passenger-id]
1 голос
/ 18 февраля 2009

Что касается второй проблемы ...

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

SELECT ppp.[passenger-id] FROM passenger ppp
INNER JOIN [passenger-flylist] ppff 
ON ppp.[passenger-id] = ppff.[passenger-id]
INNER JOIN flylist fff ON ppff.[flylist-id] = fff.[flylist-id]
WHERE ppp.[name] = @name AND
fff.[start-from] = @flightDate AND
ppp.[ticket-number] = @ticketNo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...