簡體   English   中英

MySQL Left Join不顯示其他表中的行

[英]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.

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