[英]MYSQL LEFT JOIN is not working as expected not showing all rows from left table
[英]MySQL Left Join not showing rows from other table
我有2張桌子。 一個表顯示位置信息,另一個表顯示該位置的wifi ssid和密碼。 這些表由“ LocationID”列連接。 使用2個獨立表的原因是,我可以保留特定位置的ssid和密碼的歷史記錄。
我的查詢如下:
SELECT Location.LocationID,
Location.SystemName,
Location.SiteNameLocation,
Location.SiteAddress1,
Location.SiteAddress2,
Location.SiteCity,
Location.SiteProvince,
Location.SitePostalCode,
Location.ContactName,
Location.ContactPhone,
Location.ContactEmail,
Location.ID1POC,
Location.ID2District,
Location.SiteLocationHours,
LocationWiFi.WiFiSSID,
LocationWiFi.WiFiPassphrase,
LocationWiFi.WiFiDate
FROM Location
LEFT JOIN LocationWiFi ON LocationWiFi.LocationID = Location.LocationID
我需要做的是從表中獲取最新的wifi ssid和密碼,以將其與相應的locationID一起顯示
我可以使用以下查詢進行操作:
SELECT * FROM LocationWiFi WHERE WiFiDate = (SELECT MAX(WiFiDate) FROM LocationWiFi) AND LocationID = xxxx
我確信這並不難,我只是想不通。 在此先感謝您的幫助!
編輯...
很抱歉給大家帶來混亂。 讓我嘗試並更加清楚。 我在位置表中有1500多個條目。 LocationWiFi表中有2個具有相同locationid的條目。 我需要第一個查詢(具有連接的查詢)以返回所有1500多個行,但只提取具有最大日期的wifi ssid和密碼。 對於沒有wifi ssid和密碼短語的位置,我只想顯示具有空值的列。
我再次道歉
解
嗨,大家好,
我已經解決了這個問題。 對於擁有類似解決方案的任何人,這對我來說都是有效的。
SELECT Location.LocationID,
Location.SystemName,
Location.SiteNameLocation,
Location.SiteAddress1,
Location.SiteAddress2,
Location.SiteCity,
Location.SiteProvince,
Location.SitePostalCode,
Location.ContactName,
Location.ContactPhone,
Location.ContactEmail,
Location.ID1POC,
Location.ID2District,
Location.SiteLocationHours,
a.WiFiSSID,
a.WiFiPassphrase
FROM Location
LEFT JOIN(
SELECT LocationWiFi.WiFiSSID,
LocationWiFi.WiFiPassphrase,
LocationWiFi.LocationID
FROM LocationWiFi
WHERE LocationWiFi.WiFiDate = (SELECT MAX(WiFiDate) FROM LocationWiFi)
) AS a
ON a.LocationID = Location.LocationID;
由於以下查詢不使用子查詢,因此效率更高:
SELECT *
FROM LocationWiFi
WHERE LocationID = xxxx
ORDER BY WiFiDate DESC
LIMIT 1
您擁有了所需的一切,只需將它們放在一起:
SELECT l.*, lw.*
FROM Location l
JOIN LocationWifi lw ON l.locationId= lw.locationId
WHERE lw.WiFiDate = (
SELECT MAX(WiFiDate)
FROM locationWifi
WHERE locationId = l.locationId
);
它是每行的子查詢,但我認為沒有任何好的方法。
SQLFiddle: http ://sqlfiddle.com/#!2/350ac/1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.