我們正在爲我們的數據庫模式添加一個表。它與已經存在的表格有關係,我們爲其添加了一個外鍵。請注意,我沒有創建這個模式,也沒有改變太多的權限。該應用程序已經運行了一段時間,他們猶豫改變很多。SQL左加入兩個可能的列
USER_ACTIVITY_T(preexisint表 - 唯一的相關列簡稱)
- ACTIVITY_ID(PK)
- 用戶名
- 設備ID(FK - 最近添加)
MACHINE_T(新表)
- machineid(pk - 自動遞增)
- 計算機名(唯一)
從我加入到機臺點,它收集機器數據;讓用戶看到活動期間涉及哪些機器。這很有用,但它只顯示實施數據。一位領導問我試圖通過參考與機器相關聯的用戶名來填充先前存在的記錄。我們知道這不是100%準確的,但是...是的。我們的想法是將用戶名添加到MACHINE_T中,並以追溯方式在報告中填充機器名稱(假定用戶只使用一臺機器並且從未更改其用戶名)。
那麼,新MACHINE_T表看起來像:
MACHINE_T(新表)
- 設備ID(PK - 自動遞增)
- 計算機名(唯一)
- 用戶名
現在,我們目前的SQL是:
SELECT * FROM `USER_ACTIVITY_T` LEFT JOIN `MACHINE_T`
ON MACHINE_T.machineid=USER_ACTIVITY_T.machineid
如果USER_ACTIVITY_T.machineid爲空但具有匹配的用戶名,任何人都有關於如何加入用戶名的建議?對不起。這是一個奇怪的要求,我可能花費太多時間進行過度分析。感謝您的任何幫助。我幾乎想要說它可以合理完成。
'SELECT * FROM USER_ACTIVITY_T LEFT JOIN MACHINE_T ON MACHINE_T.machineid = USER_ACTIVITY_T.machineid WHERE USER_ACIVITY_T.machineid IS NOT NULL'如果** ** MACHINE_T.machineid不爲空,所以這是一個INNER JOIN LEFT OUTER代替JOIN你可以切斷where子句 – jean
是真的。我複製了粘貼原始查詢並添加了忽略連接的子句。我將編輯答案以反映這 – Anton
實際上,左連接無論如何都在做這項工作。我會澄清 – Anton