11

これはクエリです:

INSERT INTO qualification_lookup (variation, correct_qualification)
SELECT (SELECT Qualification FROM student WHERE Qualification like 'A%') ,'A-Level'

これは、クエリを実行しようとすると発生するエラーです。

メッセージ512、レベル16、状態1、行1サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。ステートメントは終了されました。

私はSQLを初めて使用するので、誰かがそれを行うための代替手段を教えてくれたら親切に。

4

5 に答える 5

24
INSERT INTO qualification_lookup (variation, correct_qualification) 
select Qualification,'A-Level' from student   where Qualification like 'A%' 
于 2012-12-11T23:37:48.137 に答える
3
    INSERT INTO qualification_lookup (variation, correct_qualification) 
select Qualification, 'A-Level' from student where Qualification like 'A%'

正しい構文ですか

于 2012-12-11T23:37:37.077 に答える
3

クエリを作成する方法を検討する必要があります。これを実行しただけで何が得られるかを検討してください。

 SELECT (select Qualification from student where Qualification like 'A%') ,'A-Level'

あなたが得ている正確なエラーは私の推測です-あなたは単一の文字列と一致させようとしている多くの資格のリストを持っています-'Aレベル'。

一方、これは正常に機能します

 select Qualification, 'A-Level' from student where Qualification like 'A%'

INSERTとステートメントの秘訣はUPDATE、私の考えでは、SELECT必要なものを取得するステートメントを作成し、それを次のようにまとめることです。

INSERT INTO qualification_lookup (variation, correct_qualification) select Qualification, 'A-Level' from student where Qualification like 'A%'
于 2012-12-11T23:42:44.603 に答える
2

問題はこのサブクエリです:

select Qualification from student where Qualification like 'A%'

いくつかの行を返します。そのため、エラーメッセージ512が表示されます

それを使用する必要はありません。

これで十分です:

INSERT INTO qualification_lookup (variation, correct_qualification) 
select Qualification, 'A-Level' as correct_qualification
from student where Qualification like 'A%'
于 2012-12-11T23:41:59.167 に答える
0
declare @count int
declare @index int = 1
declare @currentQualificationId int = null

set @count = (select distinct count(QualificationId) from Qualification  from  where 
Qualification like 'A%')

set @currentQualificationId = (SELECT QualificationId from (select QualificationId , 
ROW_NUMBER() OVER (ORDER BY QualificationId) AS RowNumber from Qualification where 
Qualification like 'A%') as Qualification
where Qualification.RowNumber = @index) 


while (@index <= @count)
 begin

    INSERT INTO qualification_lookup (variation, correct_qualification) 
     values((select Qualification where QualificationId = 
     @currentQualificationId),'A-Level')

    set @index = @index + 1

     set @currentQualificationId = (SELECT QualificationId from (select 
     QualificationId , ROW_NUMBER() OVER (ORDER BY QualificationId) AS RowNumber from 
     Qualification where Qualification like 'A%') as Qualification
     where Qualification.RowNumber = @index) 
END
于 2018-08-06T14:36:27.073 に答える