sql >> データベース >  >> RDS >> Mysql

MySQLはwhere句で結合します

    joinに入れる必要があります whereではなく句 :

    SELECT *
    FROM categories
    LEFT JOIN user_category_subscriptions ON 
        user_category_subscriptions.category_id = categories.category_id
        and user_category_subscriptions.user_id =1
    

    inner joinで参照してください 、joinに句を入れます またはwhere 同等です。ただし、outer joinを使用する場合 、それらは大きく異なります。

    joinとして 条件では、テーブルに結合する行セットを指定します。これは、user_id = 1を評価することを意味します 最初に、user_category_subscriptionsのサブセットを取得します user_idを使用 1categoriesのすべての行に参加します 。これにより、categoriesのすべての行が表示されます 、categoriesのみ この特定のユーザーがサブスクライブしていることは、user_category_subscriptionsに情報があります。 列。もちろん、他のすべてのcategories nullが入力されます user_category_subscriptionsで 列。

    逆に、where 句が結合を行い、次に 行セットを減らします。したがって、これによりすべての結合が実行され、user_idが存在するすべての行が削除されます。 1と等しくありません 。 inner joinを取得するための非効率的な方法が残っています 。

    これがお役に立てば幸いです!



    1. MySQL5.1からメールを送信する方法

    2. MySQL8の新しいロールの使用

    3. Access2016で排他モードでデータベースを開く方法

    4. SQLAlchemyを使用して、selectステートメントの列としてサブクエリを使用してSQLを生成します