1

複数のテーブルを結合するクエリがあります。

選択した列はいずれもnull許容ではないため、使用するのに最適な結合のタイプは何ですか?

クエリは次のとおりです。

SELECT ir.range_name, it.item_type, oi.itemQuantity, i.item_value
FROM orders o 
JOIN order_items oi ON oi.orderId = o.id 
JOIN items i ON i.id = oi.itemNumber
JOIN item_types it ON it.id = i.item_type
JOIN item_ranges ir ON ir.id = i.item_name
WHERE o.id = 1;

私がすでに正しい答えを得ることができたなら、私に知らせてください!

4

2 に答える 2

2

使用している構文はINNER JOIN. このタイプの結合は、各テーブルで一致する行を返します。

つまり、 に一致する行があることを確認する必要があることを意味しますordersorder_items次に、order_items行が に一致する必要があります。一致itemsしない場合、行は返されません。

そのため、代わりに a を使用する必要がある場合がありますLEFT JOIN。は、結合先のテーブルに一致する行がない場合でも、テーブルからすべてのLEFT JOIN行を返します。orders

SELECT ir.range_name, 
  it.item_type, 
  oi.itemQuantity, 
  i.item_value
FROM orders o 
LEFT JOIN order_items oi ON oi.orderId = o.id 
LEFT JOIN items i ON i.id = oi.itemNumber
LEFT JOIN item_types it ON it.id = i.item_type
LEFT JOIN item_ranges ir ON ir.id = i.item_name
WHERE o.id = 1;

正しい構文を学習するのに助けが必要な場合は、 joinsの優れた視覚的な説明を次に示します。

注:JOINタイプを混在させることもできます。そのため、とのINNER JOIN間でを使用できますが、他のテーブルの一部では を使用できます。それは、データと、結果として何を返そうとしているかに大きく依存します。ordersorder_itemsLEFT JOIN

于 2013-03-02T14:08:37.287 に答える
1

お探しのJOINの種類はですLEFT JOIN

短く説明するとINNER JOIN、他のテーブルで少なくとも1つの一致する値を持つ行のみが取得されます。3つ以上のテーブルを結合する場合、レコードを結果リストに表示するには、各テーブルで行が少なくとも1つ一致している必要があります。

ただし、レコードに他のテーブルに一致する行がないかどうかに関係なく、 LeftHand Sideテーブル)テーブルLEFT JOINすべてのレコードが表示されます。ORDERS

SELECT  ir.range_name, it.item_type, oi.itemQuantity, i.item_value
FROM    orders o 
        LEFT JOIN order_items oi ON oi.orderId = o.id 
        LEFT JOIN items i ON i.id = oi.itemNumber
        LEFT JOIN item_types it ON it.id = i.item_type
        LEFT JOIN item_ranges ir ON ir.id = i.item_name
WHERE   o.id = 1

結合についてさらに知識を深めるには、以下のリンクにアクセスしてください。

于 2013-03-02T14:03:44.530 に答える