1

2 つのテーブルを作成しようとしてJOINいますが、正しく機能していません。私はloc_idすべてのテーブルにあり、それらはすべて の値を持っています1。私のデータベースは INNODB です。loc_idは、 という 3 番目のテーブルの一意の ID ですb_locations。このテーブルも含めてみましJOINたが、実際には必要ないため、同じ結果が得られました。JOIN将来の校正のために 3 つ以上のテーブルを作成できるようにしたいのですが、明らかに最初に 2 つを機能させる必要があります。

クエリに含まれていないテーブルの一意の ID に参加する私のアプローチは悪いアプローチですか?

ここに私のSQLがあります:

SELECT d.view_id,
    d.gps_lat survey_lat,
    d.gps_lng survey_lng,
    d.thumbnail,
    c.sign_type,
    c.gps_lat object_lat,
    c.gps_lng object_lng
FROM `d_view_angles` AS d
JOIN c_survey_elements AS c
ON d.loc_id = c.loc_id
WHERE c.loc_id = '1'

これが私が得ているものです(望ましい結果の下の太字のテキストを参照してください):

1   37.367156   -77.39987   ... FREESTANDING SIGN   37.367229   -77.399835
2   37.367305   -77.399801  ... FREESTANDING SIGN   37.367229   -77.399835
3   37.36739    -77.400022  ... FREESTANDING SIGN   37.367229   -77.399835
4   37.367619   -77.399897  ... FREESTANDING SIGN   37.367229   -77.399835
1   37.367156   -77.39987   ... DOWN LIGHTING       37.367408   -77.400077
2   37.367305   -77.399801  ... DOWN LIGHTING       37.367408   -77.400077
3   37.36739    -77.400022  ... DOWN LIGHTING       37.367408   -77.400077
4   37.367619   -77.399897  ... DOWN LIGHTING       37.367408   -77.400077
1   37.367156   -77.39987   ... DOWN LIGHTING       37.367635   -77.399944
2   37.367305   -77.399801  ... DOWN LIGHTING       37.367635   -77.399944
3   37.36739    -77.400022  ... DOWN LIGHTING       37.367635   -77.399944
4   37.367619   -77.399897  ... DOWN LIGHTING       37.367635   -77.399944

試してみましたが、上位 4 つの結果が得られ、次の結果が得られます (とGROUP BY survey_lat, survey_lngの繰り返しc.sign_typeに注意してください)。c.gps_latc.gps_lng

1   37.367156   -77.39987   ... FREESTANDING SIGN   37.367229   -77.399835
2   37.367305   -77.399801  ... FREESTANDING SIGN   37.367229   -77.399835
3   37.36739    -77.400022  ... FREESTANDING SIGN   37.367229   -77.399835
4   37.367619   -77.399897  ... FREESTANDING SIGN   37.367229   -77.399835

これらは私が得るべき結果です:

1   37.367156   -77.39987   ... FREESTANDING SIGN   37.367229   -77.399835
2   37.367305   -77.399801  ... FREESTANDING SIGN   37.367229   -77.399835
3   37.36739    -77.400022  ... DOWN LIGHTING       37.367408   -77.400077
4   37.367619   -77.399897  ... DOWN LIGHTING       37.367635   -77.399944

ばかげた単純なものだと確信していますが、まだ問題を追跡できていません。私のJOIN推測では. それが私の声明にない場合は、表のフォーマットに関する推奨事項を歓迎します。他の情報が必要な場合は、お知らせください。JOINSINNER JOINRIGHT JOINRIGHT OUTER JOINSQL


MYSQL のバージョンを制御することはできません。これは、SurpassHosting によってホストされているリモート サーバーから実行されます (お勧めしません)。

MYSQL Server バージョン: 5.0.95-community
プロトコル バージョン: 10
PHPMyAdmin を介した SQL クエリの実行 バージョン情報: 3.4.10.1 および MSQL WorkBench 5.2.37 CE

4

3 に答える 3

2

同じことに対して、左側のテーブルに 4 つのレコード ( ) と右側のテーブルに 3 つのレコード( )loc_idがあることは明らかです。1d_view_anglesc_survey_elements

これは、参加するだけでなく、それ以上のものを使用する必要があることを意味する場合がありますloc_id.

各テーブルの関連する内容を表示すると、これが明確になります。

于 2012-10-08T16:07:16.413 に答える
1

あなたのテーブルには ' d_view_anglesloc_id = 1 の複数のレジスタが含まれていると思います

それを確認して、確認してください。

于 2012-10-08T15:20:09.550 に答える
0

一意の値が原因でより多くの結果が返されるように見え ます。d.gps_lng survey_lng,クエリからこのフィールドを省略するか、DISTINCTまたはWHERE正しいクエリを使用して結果をフィルタリングするかのいずれかです。

于 2012-10-08T15:14:19.633 に答える