2017-06-19 31 views
2

我有兩個表,我是從MySQL的使用加入加入時不匹配的行

ATM

[ID] [業主] [平衡] [狀態]

繪圖數據返回數據

ATMAvatar

[ATMID] [阿凡達] [管理員] [允許] [有限公司] [限於]

我現在的查詢是

SELECT ATM . * , ATMAvatar.Avatar AS User, ATMAvatar.Admin, 
    ATMAvatar.Allowed, ATMAvatar.Limited, ATMAvatar.Limit, 
    (SELECT COUNT(*) FROM ATMAvatar WHERE ATMID = '{SOME ATM ID}') AS UserCount 
FROM ATM 
JOIN ATMAvatar ON ATM.ID = ATMAvatar.ATMID 
WHERE ATM.ID = '{SOME ATM ID}' 
AND ATMAvatar.Avatar = '{SOME NAME}' 

如果ATMAvatar和ATM都有相對的行,那麼這樣做會很好。我希望能夠將其轉換,以便在ATMAvatar行無法找到的情況下,ATM仍然會被選定爲任何ATMAvatar列的默認值。

對於實施例

  • ID:d7dafb52-bc31-4f38-a433-7c273b345454
  • 擁有者:湯姆漢森
  • 餘額:
  • 狀態:0
  • 用戶:詹姆斯McCrawford(從查詢中獲得)作爲行不會返回
  • 管理員:0(行不可用,所以不能成爲管理員)
  • 允許:0(行不可用,因此不能被允許)
  • 有限公司:1(行不可用,因此肯定限制)
  • 限制:0(行不可用,因此僅限於$ 0)
  • USERCOUNT位:15

我會很高興,如果它只是返回空行,我可以檢查在PHP中。

編輯 我的問題是我搜索詹姆斯麥克勞福德在選擇不包含他的行。我想我需要重新考慮查詢的結構

+0

James McCrawford的ATMID是什麼?和par UserCount一樣,ATMAvatar表中有15條記錄(ID:d7dafb52-bc31-4f38-a433-7c273b345454)。 – Conqueror

+0

這個例子中的信息都是模擬信息。只是一個例子。 James McCrawford是試圖使用ATM的人的名字。數據庫中沒有atm這個名字。 –

回答

0

試試這個:

SELECT ATM.*, 
     ATMAvatar.Avatar AS User, 
     ATMAvatar.Admin, 
     ATMAvatar.Allowed, 
     ATMAvatar.Limited, 
     ATMAvatar.Limit, 
     ( SELECT COUNT(*) 
      FROM ATMAvatar 
      WHERE ATMID = '{SOME ATM ID}' 
     ) AS UserCount 
FROM ATM 
JOIN ATMAvatar ON ATM.ID = ATMAvatar.ATMID 
        AND ATMAvatar.Avatar = '{SOME NAME}' 
WHERE ATM.ID = '{SOME ATM ID}' 
+0

不幸的是,但是,謝謝:( –

+0

對不起,我有你的錯誤。這項作品 –

2

可以使用LEFT JOIN它,比如:

SELECT ATM . * , ATMAvatar.Avatar AS User, ATMAvatar.Admin, 
    ATMAvatar.Allowed, ATMAvatar.Limited, ATMAvatar.Limit, 
    (SELECT COUNT(*) FROM ATMAvatar WHERE ATMID = '{SOME ATM ID}') AS UserCount 
FROM ATM 
LEFT JOIN ATMAvatar ON ATM.ID = ATMAvatar.ATMID 
WHERE ATM.ID = '{SOME ATM ID}' 
AND (ATMAvatar.Avatar = '{SOME NAME}' OR ATMAvatar.Avatar IS NULL) 

這從ATM返回所有記錄無論ATMAvatar是否有任何匹配記錄。結果行中的所有ATMAvatar相關字段將爲null,其中ATM記錄沒有任何ATMAvatar

+0

沒有運氣。ATMAvatar.Avatar是ATMAvatar聯合主鍵ATMID –

+0

我意識到問題是我選擇所有行,那麼WHERE子句是Avatar =「James McCrawford」,但在選擇中沒有James McCrawford –

+0

@TomHanson我們在查詢中有'ATMAvatar.Avatar ='{SOME NAME}',因此它不會選擇只存在於'ATM'中的記錄,因爲它們將不具有對應的'ATMAvatar'。 –