2017-11-04 3 views
1

大学席番号(USN)と件名を指定して、学生の出席を更新しようとしています。 次のクエリを使用しましたが、影響を受けていない行はありません。MySQLで更新コマンドエラーが発生しました

Update `Student Attendance` as sa 
JOIN Subjects as s ON sa.`Subject Code`=s.`Subject Code` 
set sa.Attendance ='5' AND sa.`Absent Days`='2017-10-12' 
where sa.USN ='1ks15bt001' AND s.Subject='English'; 

私だけでは、以下のクエリを実行したとき、私は出力としてこれを得た:学生表の

Select sa.USN,s.Subject,sa.Attendance 
    From `Student Attendance` as sa 
    JOIN Subjects as s ON sa.`Subject Code`=s.`Subject Code` 
    where sa.USN ='1ks15bt001' AND s.Subject='English'; 

Ouptput

スキーマ:

CREATE TABLE `Student` (
    `USN` varchar(10) NOT NULL, 
    `DOB` date NOT NULL, 
    `Dep` varchar(3) NOT NULL, 
    `SEM` int(1) NOT NULL, 
    `Class` varchar(1) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE `Student` 
    ADD PRIMARY KEY (`USN`), 
    ADD KEY `Dep` (`Dep`); 

学生の出席:

CREATE TABLE `Student Attendance` (
    `USN` varchar(10) NOT NULL, 
    `Subject Code` varchar(6) NOT NULL, 
    `Attendance` int(11) NOT NULL DEFAULT '0', 
    `Absent Days` varchar(100) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE `Student Attendance` 
    ADD PRIMARY KEY (`USN`,`Subject Code`), 
    ADD KEY `ABC` (`Subject Code`); 

件名:

CREATE TABLE `Subjects` (
    `Subject` varchar(40) NOT NULL, 
    `Subject Code` varchar(6) NOT NULL, 
    `Dep` varchar(3) NOT NULL, 
    `Sem` int(1) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE `Subjects` 
    ADD PRIMARY KEY (`Subject Code`,`Subject`) USING BTREE, 
    ADD KEY `bgf` (`Dep`); 
+0

私は悪いですが、私はそれがちょうどストリングのようにクエリに影響するとは思いません。 – Suzume

+0

このようなスキーマは、 [ゼロ、1つまたは無限の規則](http://en.wikipedia.org/wiki/Zero_one_infinity_rule)の [データベースの正規化](http://en.wikipedia.org/)に違反しているようです。 wiki/Database_normalization)を使用することができます。適切な1対多の関係を作成して、ここでの日数が適切なリレーショナルであり、任意のフィールド長の制約に制限されないようにする必要があります。 – tadman

答えて

1

正しい構文は次のとおりです。

Update `Student Attendance` sa join 
     Subjects s 
     on sa.`Subject Code` = s.`Subject Code` 
    set sa.Attendance = 5, 
     sa.`Absent Days`= '2017-10-12' 
    where sa.USN = '1ks15bt001' AND s.Subject = 'English'; 

Attendanceは数あるので、私は単一引用符を取り除くこと。これが真のために偽と1の場合は0を返すブール式です

set sa.Attendance = ('5' AND sa.`Absent Days` = '2017-10-12') 

あなたset句は次のように解析されます。 0は、問題の行に対してfalseであることを示します。

関連する問題