2016-04-29 9 views
2

2つのテーブル(得意先、 (注文)第3のテーブルを介して相互に関連するが、表Aは、複合主キー3つ目のテーブル(c)で互いに関連する2つのテーブル(a、b)から選択したいが、テーブルaに複合主キーがある

表の顧客を有する

id 

表machinsとして主キーは、これら2つの列を持つ複合主キーを持っていた:

​​

そして、これらの2は私が顧客とmachinsから人は(注文)を購入したすべてのマシンを選択するテーブルの受注に

Id(fk) 
machine(fk) 
machintype 

に関連している

私の選択コマンドは

Select c.name, c.land, m.namemachin 
from orders o 
inner join customers c on c.id = o.id 
inner join machins m on o.machine = m.Id 
where c.name = 'karl' and m.machine = o.machintype 

ですしかし、それは動作しません

あなたは私を助けてくれますか?

+0

は表にmachintypeされているテーブルのmachinsに機械モデルと同じドメインを注文しますか? – RichardCL

+0

はい、同じですが、foriegnキーではありません。 – karl

+0

このようにしたら、 内部結合マシンM.machinId = o.machineおよびm.machineModel = o.machintype。結果セットに含まれていないが期待されるデータを検証する必要があるかもしれません。 – KumarHarsh

答えて

0

あなたのフェッチが文字列連結に関係するもの、つまりすべてのマシンを文字列として取得するものである場合。あなたはSTUFFとFOR XML PATHを使うことができると思います。

さもないと、あなたが適切な関係のためにテーブルordersで利用可能であるべきで、その列の両方を表machinsで複合主キーを持っている場合、それは http://www.w3resource.com/sql/joins/using-a-where-cluase-to-join-two-tables-related-by-a-composite-primary-key-or-foriegn-key-pair.php

0

を助けるかもしれないリンクの下の目を通過します。次に、選択したクエリに対してこのテーブルを適切に結合するだけです。議論m.machineModel = o.machintype あたりとして

したがって、このクエリを試してみてください

Select c.name, c.land, m.namemachin 
from orders o 
inner join customers c on c.id = o.id 
inner join machins m on m.machinId = o.machine 
        and m.machineModel = o.machintype 
where c.name = 'karl' 
+0

お返事ありがとうございました返信私はどちらも "注文"テーブル – karl

+0

としてお返事ありがとうございます。私はテーブル "machins"の "machineModel"と同じ列の "machintype"として "order"テーブルを持っており、テーブル "machins"の "machinId"と同じ "machine" ....しかし、マシン(順序)はfkであり、テーブルmachinで2つの列(machinId、machinemodel)は複合pkです。あなたの注意のためにありがとうございます – karl

+0

次に使用することができます* o.machine = m.machinId とo.machintype = m.machineModel *は、応答plz chkを変更しました。 –

関連する問題