sql >> Databasteknik >  >> RDS >> Mysql

MySQL gå med i where-klausulen

Du måste lägga den i join satsen, inte 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

Se, med en inner join , sätta en sats i join eller where är likvärdig. Men med en outer join , de är väldigt olika.

Som en join villkor, anger du raduppsättningen som du ska ansluta till tabellen. Det betyder att den utvärderar user_id = 1 först och tar delmängden av user_category_subscriptions med ett user_id av 1 för att gå med i alla rader i categories . Detta ger dig alla rader i categories , medan endast categories som den här användaren har prenumererat på kommer att ha all information i user_category_subscriptions kolumner. Naturligtvis alla andra categories kommer att fyllas i med null i user_category_subscriptions kolumner.

Omvänt, en where satsen gör join, och sedan minskar raduppsättningen. Så detta gör alla kopplingar och eliminerar sedan alla rader där user_id är inte lika med 1 . Du har ett ineffektivt sätt att få en inner join .

Förhoppningsvis hjälper detta!



  1. Ansluter Oracle till PostgreSQL

  2. MySQL-fel 2006:mysql-servern har försvunnit

  3. Monitoring Galera Cluster för MySQL eller MariaDB - Understanding Metrics (Uppdaterad)

  4. Hur fungerar MySQL-index?