特定のテーブルを作成しようとするといくつかの問題が発生しています。私はすでにこのサイトでいくつかの似たような答えを読んだことがありますが、私は彼らの答えを理解しているかどうか、そして/またはそれが私の問題にどのように適用されているか分かりません。T-SQLで条件付き選択に問題が発生する
私はレシピ(下の表の定義)のための成分が含まれている既存のテーブルを持っている:私はすべてのレシピで使用されるすべての成分の名前が含まれているテーブルの内容を作成して表示するようにしようとしている
Create Table Recipes.dbo.IngredientsByRecipeID
(
RecipeID int,
IngredientName varchar(max),
UnitTypeOfIngredient varchar(max),
QuantityOfIngredient decimal(6,3)
);
アルファベット順に、すべての重複したエントリが削除されています。
実装方法に関するいくつかのバリエーションを試しましたが、私の実装やSQL Serverの動作に関する問題が発生しているかどうかはわかりません(T- SQLとその方法)。
次のように新しい、重複のないテーブルにアルファベット順に成分をソートするための私の方法は次のとおりです。
/*these three lines represent code which I've been trying to use to control the problems I keep getting with tables existing or not existing, I don't know if they are really helping or not. The first two only drop and create the table, the second is one attempt at a working solution for my needs*/
--drop table AlphabeticallySortedIngredientsList;
--create table AlphabeticallySortedIngredientsList (IngredientName varchar(max));
--select IngredientName into AlphabeticallySortedIngredientsList from IngredientsByRecipeID where ((select count(IngredientName) from AlphabeticallySortedIngredientsList) = 0) order by IngredientName asc;
--here is my latest attempt at getting a working solution for my needs
select IngredientName
into AlphabeticallySortedIngredientsList
from IngredientsByRecipeID
where not exists (select *
from AlphabeticallySortedIngredientsList
where IngredientName = AlphabeticallySortedIngredientsList.IngredientName)
order by IngredientName asc;
各実装では、私が最初に構文エラーのいくつかの種類を持っていましたが、(明らかに)それらをクリーンアップした後、エラーは、私はいつも最後のエラーが1つ残っており、入力に基づいてエラーが変化する間、同じオブジェクトがエラーを引き起こしています。
:Msg 2714, Level 16, State 6, Line 9
There is already an object named 'AlphabeticallySortedIngredientsList' in the database.
Msg 208, Level 16, State 1, Line 5
Invalid object name 'AlphabeticallySortedIngredientsList'.
私も「を作成テーブルAlphabeticallySortedIngredientsList」行のコメントを外した場合は、その後、私はこのエラーを取得する:私はコメントを外し、上から「ドロップテーブルの行を残す場合は、このエラーが私が手であります
そして、私はテーブルを削除して、両方の行をコメントアウトした場合、私は上記と同じエラーを取得:
Msg 2714, Level 16, State 6, Line 9
There is already an object named 'AlphabeticallySortedIngredientsList' in the database.
私が「AlphabeticallySorにIngredientNameを選択するようだと、私は困惑していtedIngredientList '行は、テーブルを作成しているかどうかを判断できません。私の解決策が実行される前にテーブルをドロップすると、見つからないと言います。ソリューションを実行する前にテーブルを作成すると、テーブルがすでに存在していると表示されます。
私は、ステートメントの '選択'部分がAlphabeticallySortedIngredientsList(存在しないと仮定して)を作成していますが、条件付きでAlphabeticallySortedIngredientsListの値を検索しようとしていますそれを作成する操作はまだ行われていません。私はこの評価で適切な道を歩んでいますか?そうであれば、どうすれば問題を解決できますか?
レコードのIngredientsByRecipeIDの元の内容を保持する必要があります。 AlphabeticallySortedIngredientListは、IngredientsByRecipeIDからすべての成分のきれいで整然としたリストを提示する目的のみを果たします。
私は条件付きを削除すると( 'where'句をコメントアウトすると)、select intoはエラーなしで動作することにも言及する必要があります。これは、drop tableとcreate tableの両方がコメントアウトされており、AlphabeticallySortedIngredientListテーブルがデータベースに既に存在していません。
重複を削除せずにすべてをテーブルに追加してから重複を削除して削除する方がいいでしょうか?私の問題は、すべてを1つのステップでやろうとしているかもしれません。
insert TABLENAME select .... from TABLE – Ben
注意:AlphabeticallySortedIngredientList'テーブルがすでに存在していて、それに挿入していても、SQL文は本質的にトランザクショナルなので重複を排除する方法は機能しません。つまり、いろいろなことを意味しますが、関連するものは、* **中間** *州*という概念はありません。つまり、SQLステートメントが見ることができる唯一のdb/dataステートは、ステートメントが開始されたときに存在していたものです。この理由から、 'DISTINCT'や' GROUP BY'のような機能がSQLに含まれています。 – RBarryYoung
カップルの指針。あなたのサブクエリは、各成分がそれ自身の重複であると考えていたでしょう。そして、それが正しく相関していても、それは当てはまります。一般に、結果を挿入するためのソートの理由もありません。 – shawnt00