簡體   English   中英

如何在條件上使用mysql join?

[英]How to use mysql join on or condition?

我試圖構造此查詢,該查詢是僅從USER表中選擇記錄(如果它們出現在FOLLOWER表中),但會不斷出現val.slide錯誤。

這是我的查詢,如果我做錯了什么或如何更好地構造它,請告訴我:

SELECT * from USERS JOIN FOLLOWERS 
  ON (USERS.uid = FOLLOWERS.fid OR USERS.uid = a OR USERS.uid = b) 
WHERE FOLLOWERS.refid = 1

我也嘗試過這個:

SELECT * from USERS WHERE (USERS.uid = a OR USERS.uid = b) JOIN FOLLOWERS 
      ON USERS.uid = FOLLOWERS.fid 
    WHERE FOLLOWERS.refid = 1

我正在使用帶有MySQL的nodejs。

更新:好的,讓我添加一些可能會清除它的解釋。 我想從USER表中獲取USER的所有設置信息,以獲取不在關注者中的兩個用戶ID,以及該用戶表中與關注者ref ID的值匹配的任何關注者-所以最終我想要返回用戶A,用戶B和用戶c,d,e,f(如果它們與參考ID匹配)。

Table USERS:
uid: a, settings_on: true
uid: b, settings_on: false
uid: c, settings_on: true
uid: d, settings_on: false
uid: e, settings_on: false
uid: f, settings_on: false

Table FOLLOWERS:
fid: c, ref_id: 1
fid: d, ref_id: 1
fid: e, ref_id: 3
fid: f, ref_id: 2

Expected:
uid: a, settings_on: true
uid: b, settings_on: false
uid: c, settings_on: true
uid: d, settings_on: false

這是預期的結果:

由於需要OR條件,因此需要外部聯接,因此跟隨者條件必須處於聯接條件中(否則您將有效地獲得內部聯接):

SELECT *
from USERS
LEFT JOIN FOLLOWERS ON USERS.uid = FOLLOWERS.fid
  AND FOLLOWERS.refid = 1
WHERE USERS.uid IN (a, b) -- either the user id matches
OR FOLLOWERS.fid IS NOT NULL -- or the follower condition matches

USERS.uid IN (a, b)替換USERS.uid = a OR USERS.uid = b不僅更容易編碼和讀取,而且通常表現得更好(取決於優化器的性能),因為通常只有一個索引被選中,並且僅使用一個表達式來獲取要在該索引中查找的值,因此您會很快找到a ,但是b會進行全面掃描,反之亦然)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM