差異を返す
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 サイトの他の関連記事を参照してください。