sql >> Databáze >  >> RDS >> Mysql

MySQL se spojí s klauzulí where

Musíte to vložit do join klauzule, nikoli 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

Vidíte, s inner join , vložením klauzule do join nebo where je ekvivalentní. Nicméně s outer join , jsou velmi odlišné.

Jako join zadáte sadu řádků, kterou budete připojovat k tabulce. To znamená, že vyhodnotí user_id = 1 nejprve a přebírá podmnožinu user_category_subscriptions s user_id z 1 pro připojení ke všem řádkům v categories . Tím získáte všechny řádky v categories , zatímco pouze categories že se tento konkrétní uživatel přihlásil k odběru, bude mít všechny informace v user_category_subscriptions sloupců. Samozřejmě všechny ostatní categories bude vyplněna null v user_category_subscriptions sloupce.

A naopak where klauzule provede spojení a pak snižuje sadu řádků. To tedy provede všechna spojení a poté odstraní všechny řádky, kde je user_id nerovná se 1 . Zbývá vám neefektivní způsob, jak získat inner join .

Snad to pomůže!



  1. Pomalý start MySQL v režimu GTID? Problémem může být velikost binárního souboru protokolu

  2. Oracle Locks &table locks:Jak to funguje

  3. Převeďte řetězec oddělený čárkami na pole v PL/SQL

  4. dynamický dotaz mysql v uložené proceduře