0

これが私のデータベース構造です(基本的な関係): データベース構造

client_ID、Job_id、tech_id、および Part_id を入力し、存在するすべての作業指示書を返す1 行のクエリを作成しようとしています。それ以上でもそれ以下でもありません。

これまでのところ、このクエリを生成するのに苦労しました:

SELECT      cli.client_name,    tech.tech_name,  job.Job_Name, w.wo_id,  w.time_started, w.part_id, w.job_id, w.tech_id, w.clients_id, part.Part_name   
 FROM work_orders as w, technicians as tech, clients as cli, job_types as job, parts_list as part
LEFT JOIN technicians as techy ON tech_id = techy.tech_name
LEFT JOIN parts_list  party ON part.part_id = party.Part_Name
LEFT JOIN job_types joby ON job_id = joby.Job_Name
LEFT JOIN clients cliy ON clients_id = cliy.client_name

どうやら、すべての結合が発生すると、それらの参照に従って正しい外部キー値が入力されることさえありません

  • [一部の値は実際の外部キー ID として出力され、対応する値でさえありません。]

    私が持っているテーブルの最大の行(上記のいずれか)に応じて、約20〜30回続きます。

私は 2 つの作業指示書しか作成していないので、理想的には、正しい情報を含む 2 つのレコード、列、およびフィールドのみを返す必要があります。私は何が間違っているのでしょうか?MySQL にはあまり長く携わっていませんが、できる限り多くのことを学んでいます。

4

1 に答える 1

1

参加条件が間違っています。tech_id = tech_name ではなく、tech_id = tech_id で参加します。すべての結合に対してこれを行うように見えるため、すべてを修正する必要があります。

私は本当にあなたの質問のテキストに従っていないので、あなたの質問だけに基づいて答えています.

編集

コメントへの返信はこちら。あなたは、技術名の列を「ロード」したいと言いました。技術名を結果セットの一部にしたいという意味だと思います。

クエリの SELECT 部分は、結果セットに含まれる列を決定するものです。列が存在するテーブルが FROM/JOIN 句で参照されている限り、そのテーブルから任意の列を選択できます。

JOIN ステートメントは、あるテーブルの値を別のテーブルの値に基づいて "検索" する方法と考えてください。これは非常に単純化された定義ですが、考え始めるには良い方法です。結果セットに技術名が必要なので、それが存在する Technicians テーブルで検索します。ただし、Work Orders テーブルにある値で検索する必要があります。Technicians テーブルに関連付ける Work Orders テーブルにあるキー (実際には外部キーと呼ばれます) は、tech_id です。tech_id を使用して Technicians テーブルの関連する行を検索します。これにより、そのテーブルの任意の列を結果セットに含めることができます。

于 2013-02-07T22:00:02.993 に答える