0
私はコース(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に再クエリする必要があります。しかし、1つのコースは複数の専攻科目に含めることができるため、それらの間に参照表がなければならないと考えています。 –
devlin carnageリプレイに感謝します。 INNER JOINは実行後に0行を与えます。上記のテーブルの詳細を書きます。 – AL3MS