ホームページ  >  記事  >  データベース  >  mysqlで内部結合と左結合を使用する方法

mysqlで内部結合と左結合を使用する方法

WBOY
WBOY転載
2023-06-01 19:37:25984ブラウズ

Difference

差異を返す
1. 内部結合は、2 つのテーブル内の結合フィールドが等しい行のみを返します
2. 左結合の数が以下です。左側のテーブルのレコード数と右側のテーブルのレコード数に等しくなります。

異なる数値
1. 内部結合は、右側のテーブルの結合フィールドに等しい、左側のテーブルのすべてのレコードを返します。
2. 左結合の数は、左テーブルのレコード数と同じです。

レコード属性は異なります。
1. レコード属性は、内部結合に不十分な部分は直接破棄されます。
2. 左結合が不十分なレコード属性を NULL で埋めます

内部結合シナリオ

2 つのテーブルを設計します:

  • channel チャネル テーブル: チャネル ID 、チャネル名など。

  • module モジュール テーブル: モジュール ID、モジュール名、channel_id。

ページにチャネルが表示される場合、新しいチャネルはあるもののモジュールがない場合があります。この時点では、内部結合は使用できません。そうでないと、新しく追加されたモジュールをクエリできないため、左結合を使用します。

 select channel.* from  channel left join modules on channel.id = modules.channel_id
 where page_id=1
 group by channel.id order by channel.new_sort asc , channel.id desc

1. Page_id は、どのページ タイプを区別するためにチャネル テーブルで定義されているページ タイプを参照します
2. チャネル ID には複数のモジュールを関連付けることができるため、チャネルに関連付ける必要がありますid Grouping
3. New_sort はチャンネルの並び替え表示を設定することができ、また、同じ並び順のチャンネルを最初に表示する必要があります。

以下の場合、新規に作成したチャンネルは表示されず、モジュールのないチャンネルも表示されません。

select channel.*  from channel inner join modules on channel.id=modules.channel_id
where page_id=1 group by channel.id order by channel.new_sort asc , channel.id desc

最後に少し疑問なのですが、チャンネルはチャンネル関連情報のみを表示し、関連するモジュール情報は使用しないので、これでニーズは満たせるのではないかと感じています。後で問題が見つかったら更新します

 select channel.* from  channel
 where page_id=1 order by channel.new_sort asc , channel.id desc

えーっと、質問に付け加えますと、上記の残りの問題は、モジュールの ID をページ上でクエリする必要があるため、関連付けられるということです。

以前に内部結合シナリオに遭遇したことがあります。後で追加します~

内部結合シナリオ

新しいポリシー テーブルpolicy_libを追加し、中間テーブルを作成しますchannel_policy レコード チャネル チャネルは、policy_lib ポリシー テーブルに関連付けられます。
SQL は次のように記述されていることがわかります

select policy_lib.id,channel_policy.policy_id,channel_policy.channel_id,channel.id  from policy_lib inner join channel_policy on channel_policy.policy_id=policy_lib.id 
inner join channel on channel.id=channel_policy.channel_id

内部結合を使用すると、明らかに結果クエリは空になりません。左結合を使用すると、テーブルにダーティ データがある場合に備えて、データが存在します。処理中に、左側にスペース、右側にスペースを入力する必要があるのは明らかに不合理です。

以上がmysqlで内部結合と左結合を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。