最初に正規化する必要があります。その周りにはたくさんのものがありますが、常識を働かせてそれを本当に曖昧にするチュートリアルがたくさんあります
列名を見ると、3つのテーブルがあります
Customers(CustomerID、CustomerName、CustomerAddress)
CustomerOrders(OrderID、CustomerID、SellDate、ProductNumber)テーブルや列にSQLキーワードと同じ名前を付けないようにしてください。
製品(ProductNumber、ProductDescription)
正規化では、次のようになります。たとえば、OrderIdを使用すると、テーブル内のすべてのレコードを一意に識別できるはずです。テーブルを分割するときに、CustomerIDを追加しました。これは、同じ名前の顧客が複数いる可能性があるためです。
もう1つの簡単なルールは構造にあります。顧客に複数の注文がある場合、名前と住所を複数回保存することになります。これは無駄ですが、本当の問題は、その顧客が住所を変更した場合はどうなるでしょうか。変更する行をどのように見つけますか。Wherename="Fred"およびAddress="Here"を実行できますが、住所がHereのFredという顧客が複数いるかどうかはわかりません。
したがって、最初のクエリは結合になります
Select Customers.CustomerName,Customers.CustomerAddress From Customers
Inner join CustomerOrders On Customers.CustomerID = CustomerOrders.CustomerID
Where CustomerOrders.OrderID = 7
または、過去の学習結合を今のところスキップしたい場合は、2つのクエリでそれを行うことができます
Select CustomerID From CustomerOrders Where OrderID = 7
それから
Select CustomerName,CustomerAddress From Customers Where CustomerID = ?
結合を使用する必要がありますが、サブクエリを使用すると頭を丸めるのが少し簡単になる場合があります。両方のクエリを同時に実行できます
Select CustomerID From CustomerOrders
Where CustomerID In (Select CustomerID From CustomerOrders Where OrderID = 7)
SQLテーブルの作成についてはよくわかりませんが、主キーと外部キーの2つを確認する必要があります。これにより、データベースにいくつかのルールを配置できます。CustomerOrdersの主キーを使用すると、同じIDを持つ2つの注文が発生しなくなります。これは悪いことです。
外部キーを使用すると、存在しなかった顧客のCustomerOrderを作成できなくなり、存在しない製品のCustomerOrderを作成できなくなります。
あなたがそのルートをたどり、物を注文するためのアプリケーションを作成しようとしていたと仮定します。
あなたはおそらく顧客を維持するための機能を持っているでしょう。
Insert Into Customers(CustomerID,CustomerName,CustomerAddress) Values(1,'Fred Bloggs','England')
そして1つは製品用です
Insert Into Products(ProductNumber,ProductDescription) Values(1,'A thingamabob')
次に、顧客を選択してIDを取得し、製品を選択して番号を取得します。これにより、CustomerName、CustomerAddress、またはProductDescriptionをいじる必要がなくなります。
と
Insert Into CustomerOrders(OrderID,CustomerID,ProductNumber,SellDate) Values(1,1,1,'20121017')
日付の形式に注意してください。日付を文字列としてSQLに渡す場合は、(別のトピックですが)YYYYMMDDで行います。選択して元に戻すと、マシン/データベースの形式で取得されます。あなたの場合はmm/dd/yyyyのように見える設定。問題は、1年に12か月しかないことを知っているので、私が推測したことです。(私を上級開発者にする理由の1つ:)あなたの例の販売日が2012年1月5日だったとしたら、私は英語用に構成されているので、それを5月1日と読みました。あいまいさは絶対に避けてください。定期的に連絡を取り、あなたを傷つけます。
PSあなたがそれをした方法2012年1月15日は1を15で割ったような数式として扱われます...
したがって、結合を記述できなかった理由は、基本的にテーブルが1つしかないためです。結合とは、あるテーブルを別のテーブルに結合することです。実際にはそれよりも少し複雑ですが、それはあなたが学習曲線にいるところを過ぎた良い方法です。
データの移動に関しては、より早くやり直してください。同じ名前で2つの異なる顧客を作成した可能性は低いですが、データを移動するためのクエリでは、使用できる可能性のあるものを考慮に入れる必要があります。
Identity
CustomerIDが(自動番号)列であると想定してデータを移動するには
何かのようなもの
Insert into Customers(CustomerName,CustomerAddress)
Select Distinct CustomerName,CustomerAddress From [Order]
顧客のために仕事をします。
それから製品のために
Insert into Products(ProductDescription)
Select Distinct ProductDescription From [Order]
それで
Insert into CustomerOrders(OrderID,CustomerID,ProductNumber,SellDate)
Select old.OrderID,c.CustomerID,p.ProductNumber,old.SellDate
From [Order] old
Inner Join Products p On p.ProductDesription = old.ProductDescription
Inner Join Customers c On c.CustomerName = old.CustomerName And c.CustomerAddress = old.CustomerAddress
CustomerOrdersを行う可能性があると思います