18

これは私の仕事ではなく、SQL についての知識はまだほとんどありません。私の質問は、この問題にどのようにアプローチするかについての指示を得ることです。質問があまりにも一般的または無意味でないことを願っています。

データベースにいくつかのテーブルがあります。それらのいくつかは、基本的なテーブル、国のリスト、顧客のリストなどです。これらの基本テーブルは、ユーザーが特定のフィールドに事前設定された値を使用し、他のフィールドにも手動で入力する他のグリッドの dropDownLists の値をサポートするために使用されます。このようなもの:

ここに画像の説明を入力

現在、参照ではなく実際の値を取得する必要があるテーブルを指す動的レポートに取り組んでいます。

私が言ったように、私が抱えている問題は、私が取り組んでいる特定のテーブルのプリセット値が id_references (id_Country、id_Customer、..) であり、それらが表す実際の値が必要なことです。実際の値を取得するにはどうすればよいですか? レポートに別のテーブルを指定すると、レコード間の意味/リンクが失われます。

4

1 に答える 1

26

たとえば、質問に示されているこのプロジェクト テーブルで Country_ID を使用して国の名前を取得しようとしている場合、次のようなことができます。

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ......
FROM Projects P INNER JOIN Countries C
ON P.id_Country = C.id_Country
WHERE SomeColum = 'Your Condition'

1) SELECT 句で、結果セットに必要な列を選択します。
2) FROM テーブル名を言及
3) テーブル間の関係を定義する ON 節 たとえば、Projects テーブルには、Countries テーブルの id_Country を参照する列 id_Country があり、これら 2 つのテーブル間の関係を定義します。 4) 列リスト、データのソース (テーブル)、それらの関係 (On Clause) を選択したら、id_Country WHERE C.CountryName = 'UK' の
ように、クエリから返される行数をフィルター処理できます。
英国からのみ結果を返します。
5) from 句では、文字 'C' と 'P' はエイリアスであるため、完全なテーブル名をもう一度入力する必要はありません。これにより、コードがよりシンプルになり、読みやすく、デバッグしやすくなります。

クエリでそれらのテーブル間の関係を定義できる限り、必要なデータを取得するために結合する必要があるテーブルの数に関係なく、正常に機能するはずです。SQL サーバーでは、必要なすべてのデータが 1 つのテーブルにあることはめったにありません。通常は、2 ~ 3 個のテーブルまたはそれ以上のテーブルを結合します。たとえば、3 つの異なるテーブルに存在するデータが必要な場合は、3 つすべてを次のような 1 つのクエリで結合します ...

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ......
FROM Projects P INNER JOIN Countries C
ON P.id_Country = C.id_Country
INNER JOIN Table_3_Name T3
ON T3.CommonColumn = P.SomeCommonColumn (it will be a common column between table 3 and Projects OR Countries)
WHERE SomeColum = 'Your Condition'

ただし、テーブル間でさまざまな種類の結合を実行できるため、実際に結合を調べる必要があります。この例では、これらすべてのテーブル間で一致する行のみを返す INNER JOIN を使用しました。LEFT JOIN または RIGHT JOIN を実行できます。
LEFT JOINは、JOIN キーワードの LEFT 側にあるテーブルからすべての行を返し、他のテーブルから一致する行のみを返します。
RIGHT JOINは、JOIN キーワードの右側からすべての行を返し、他のテーブルから行をマンチングするだけです。

必要な列のみを含むクエリ

Select customers.customer_name, Products.Product_type, Manufacturers.Manuf_name 
from Projects inner join customers
on     customers.cust_id= Projects.proj_cust_id
inner join Products
on     Products.prod_id= Projects.proj_prod_id
inner join Manufacturers
on     Manufacturers.man_id= Projects.proj_man_id

Alias を使用すると、まったく同じ結果が得られますが、読みやすいコードもこれを試してください ....

Select C.customer_name, Prod.Product_type, M.Manuf_name 
from Projects Proj inner join customers C
on     C.cust_id= Proj.proj_cust_id
inner join Products Prod
on     Prod.prod_id= Proj.proj_prod_id
inner join Manufacturers M
on     M.man_id= Proj.proj_man_id
于 2013-10-13T19:17:40.033 に答える