2012-01-13 26 views
2

私は3つのテーブルを持っています。 service_robot_errorserviceには、サービステーブルの主キーである外部キーが含まれています。 robot_errorには、外部キーを与える鉱石はありません。 複数の検索結果を検索して印刷する

TABLE: robot_error 
| id | date | stop_time | start_time | robot | position | error_code | observation | solution | downtime | logged_by | 
| 1 | 02.01.2012 | 14:51:31 | 14:52:00 | 20 | 25/7 | 214 | X dir | Rob off | 29 | XXX | 

TABLE: service 
| service_id | service_date | service_module | service_user | service_comment | service_type | 
| 1 | 13.01.2012 | Robot | XXX | Test service | Errorservice | 

TABLE: service_robot_errorservice 
| errorservice_id | service_id | errorservice_robot | errorservice_tracksensor | errorservice_gripper | 
| 5 | 1 | 54 | OK | OK | 

ロボットのためのユーザーの検索は(16 EKS)私は結果がrobot_error内のすべてのインスタンス日付でorderdとロボットは、サービスが登録されている場合、このインスタンスはまた、結果に示すべきであるようにしたい

例:

robot_error instance 
robot_error instance 
robot_error instance 
service instance 
robot_error instance 
service instance 

私は結果を見てみたいものです。私が最初にこのSQLの外に

SELECT * FROM robot_error WHERE robot = '16' 

を結果を取得し、robot_errorテーブル内のすべての結果ループにしばらくを作るためにしようと試みましたが、私は私が表示されるためにサービステーブルからの結果を作ることができる方法を見つけ出すカント、することができます誰も助けてくれる? :)

+0

ですから、robot_error' '内のすべてのレコードを検索する:それはおそらく、このようになりますそのロボットに関連するサービスがあれば? 'service_robot_errorservice'テーブルで、' errorservice_robot'はロボットの 'id'ですか? –

+0

と、そのロボットに関連付けられたサービスがある場合、サービスからの単一のレコード?これは単一である必要はなく、0から多くの数になることができます。 errorservice_robotはロボットのIDです(yes)。これは、robot_errorで使用されるのと同じIDです。 robot = errorservice_robot –

答えて

0

joinsをお勧めします。

  • は、JOIN:
  • LEFT JOINを両方のテーブルに少なくとも1つの一致があるとき、行を返す:左表からすべての行を返し、右の表
  • には試合がRIGHT JOINの存在しない場合でも:右の表からすべての行を返し、
  • はFULL JOINの左のテーブルで一致まったく存在しない場合でも:一致するものがテーブルの1

である。しかし、あなたが持っている必要があるだろう時に行を返すが、 robot_errorとservの関係あなたが結合で照会を使用できるようになる前に。特に `id`とservice``から単一のレコードを持つロボットの

SELECT * FROM robot_error LEFT OUTER JOIN services ON robot_error.ID = services.FK WHERE robot = '16' 

Jeff Atwood demonstrates the different Joinsかなりnicley

+0

私はbeacuseに参加できるとは思わないが、私はこの結果を得る: robot_error xxx | service_id 1 robot_error xxx | service_id 1 そのロボットに16個のrobot_errorsがある場合、この結合はサービステーブルから16個のインスタンスを作成します。エラーは16件ありますが、サービスは1件しかありません。 1つのエラーと5つのサービスがあります。ここには説明するイメージがあります http://bildr.no/view/1076987 –

+0

結果は、参加するものがないことを意味します。これは仕様によるものであり、クエリが間違っているか、データセットの関係にあることを意味します。前述のように、robot_errorテーブルとserviceテーブルには、これが動作するための関係が必要です。私はrobot_error.IDとservice.FKをプレースホルダとして使用しています。関係者自身で実装する必要があります。あなたはまた、クエリを再生し、あなたが得る結果を確認することができます、最終的にそれを把握します。 – SanBen

+0

私はこの設定が[正規化されていない](http://en.wikipedia.org/wiki/Database_normalization)ではないと確信しています。しかし、私はテーブルservice_robot_errorserviceは、キーを保持すると思う;)。 robot_errorとserviceの両方のIDがそのテーブルにある場合は、クエリを使用して必要な情報を取得できます。次のようなものがあります:SELECT * FROM service_robot_errorservice LEFT OUTER JOIN robot_error ON service_robot_errorservice.errorservice_robot = error_robot.id LEFT OUTER JOINサービスON service_robot_errorservice.service_id = service.service_id WHERE robot_error.robot = '16'これは頭部にあるので、それを確認してください – SanBen

関連する問題