1

mysql データベースがあり、特定の選択をしたいと考えています。シナリオは次のとおりです。

最初のテーブル

貨物車両に関する道路リスト データ。

roadListNumber(primary_key), vehicle, driver, startWorkTime, endWorkTime and so on.

2 番目のテーブル

最初のテーブルの主キーでマッピングされた貨物ゾーン。

roadListNumber(foreign_key), zoneId, timeInside, spentMoney and so on.

問題は、すべての車両が貨物ゾーンに行くわけではないため、一部の道路リストが貨物ゾーンにマッピングされていないことです (2 番目の表)。ここに私の問題と質問があります。

貨物ゾーンにマッピングされていないロードリストをスキップせずに、最初のテーブルからすべてのロードリストを選択し、結果を 2 番目のテーブル (貨物ゾーン) と結合するにはどうすればよいですか?

4

2 に答える 2

2

を使用LEFT JOINしてデータを取得できます... また、データGROUP BYの繰り返しを避けるためにも使用できます..

SELECT rl.roadListNumber,rl.vehicle,cz.zoneId,cz.spentMoney  
FROM road_list rl 
LEFT JOIN cargo_zone cz on (rl.roadListNumber=cz.roadListNumber) 
GROUP BY rl.roadListNumber
于 2013-02-15T11:44:09.143 に答える
1

あなたはすでに正しい単語 (JOIN) を使用していました。最初 (または左LEFT OUTER JOIN) のテーブルのすべてのレコードをフェッチし、句に従って2 番目 (または) のテーブルから対応するレコードに関連付けるために使用できます。ON

ここでの左表と表の用語の使用法と、それがどのように関連しているかに注目してください。LEFTOUTER JOIN.

2 番目のテーブルに一致するレコードがない場合NULLは、結果セットの 2 番目のテーブルの列を取得します。

SELECT * FROM roadlist rl 
    LEFT OUTER JOIN cargozones cz ON rl.roadlistnumber = cz.roadlistnumber

の種類が多いですJOIN。たとえば、を使用しているINNER JOIN場合、2 番目のテーブルに一致するレコードのみが取得されます。

SQL 結合がどのように機能するかについての視覚的な説明については、このブログ投稿を参照してください: Coding Horror: A Visual Explanation of SQL Joins

于 2013-02-15T11:44:12.003 に答える