У меня есть вкладка для курсов (CID, CName), а в другой таблице представлены майоры для каждого курса CourseMajor (CID, MNom).JOIN SQL не работает, как должно быть
У меня есть список рассвета, который имеет майоры чисел. если пользователь выбирает основной номер из списка, должен быть заполнен еще один список курсов, выбранных из выбранного основного.
У меня есть приведенный ниже код, покажи мне все курсы не только по курсам для выбранного основного номера! Я использовал LEFT JOIN, RIGHT JOIN, INNER JOIN, FULL OUTER JOIN .... и никто из них не работает.
Примечание: Я использую C#, ASP.NET, VS.NET ...
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TBCourse FULL JOIN TbCourseMajor ON TBCourse.CId = TbCourseMajor.CId AND TbCourseMajor.MNom = '" + DLMNom.SelectedValue + "' ", con))
{
con.Open();
cmd.ExecuteNonQuery();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
while (reader.Read())
{
DLCName.Items.Add(new ListItem(reader["CName"].ToString(), reader["CNom"].ToString()));
}
}
else { TxtCRN.Text = "Not worked"; }
}
}
Это некоторые подробности о таблицах:
CREATE TABLE [dbo].[TBCourse] (
[CId] INT IDENTITY (1, 1) NOT NULL,
[CNom] INT NOT NULL,
[CName] NVARCHAR (50) NOT NULL,
[Chours] NCHAR (10) NOT NULL,
CONSTRAINT [PK_TBCourse] PRIMARY KEY CLUSTERED ([CId] ASC)
);
CREATE TABLE [dbo].[TbCourseMajor] (
[CId] INT NOT NULL,
[MNom] INT NOT NULL,
PRIMARY KEY CLUSTERED ([CId] ASC),
FOREIGN KEY ([CId]) REFERENCES [dbo].[TBCourse] ([CId]),
FOREIGN KEY ([MNom]) REFERENCES [dbo].[TbMajor] ([MNom])
);
Если вы хотите видеть только курсы из выбранного основного номера, вы должны использовать 'INNER JOIN'. Если это не работает, вам нужно рассказать нам больше о вашей схеме базы данных (как «TBCourse» относится к «TbCourseMajor»), предоставить некоторые примеры данных и рассказать нам, что вы получаете, когда вы выбираете конкретный основной номер. –
Да. Каждый раз, когда пользователь меняет майор, вы должны повторно запросить SQL, чтобы получить список курсов для этого основного. Однако я считаю, что между ними должна быть справочная таблица, потому что один курс может быть включен в более чем один майор. –
devlan carnage Спасибо за повтор. INNER JOIN дает 0 строк после выполнения. Я напишу подробности о таблицах выше. – AL3MS