繁体   English   中英

MYSQL FULL JOIN模拟查询,意外结果

[英]MYSQL FULL JOIN simulation query, unexpected result

我有两个表,markers和markerDetails。 我想将markerDetails行中的marker值附加到行中,如果不存在markerDetails则为NULL值。 两者的共同列是经度和纬度。 我用LEFT JOINRIGHT JOIN尝试了UNION许多不同变体。

这是我现在的查询,很简单,几乎可以正常工作:

$query = mysqli_query($link, "SELECT * FROM markers as m LEFT JOIN markerDetails as md 
        on m.latitude=md.latitude AND m.longitude=md.longitude WHERE m.whoAdded='$user'");

//tried, same result as above
mysqli_query($link, "SELECT * FROM markers as m LEFT JOIN markerDetails as md on
    m.latitude=md.latitude AND m.longitude=md.longitude WHERE m.whoAdded='$user' UNION SELECT * FROM markers as m 
    RIGHT JOIN markerDetails as md on m.latitude=md.latitude AND m.longitude=md.longitude");

这个查询的问题,如果markerDetails中没有一行,由于某种原因,它会给我一个NULL id,NULL纬度和NULL经度。 如果markerDetails中有一行,我会得到markerDetails行的ID,而不是markers行。

理想情况下,我希望从标记中获取整行,并从markerDetails追加行,并包含一个经度和纬度实例,并且仍然使用WHERE m.whoAdded='$user' 我对这里的JOIN查询不了解什么?

markers STRUCTURE:
id  latitude  longitude  whoAdded  locationType  locationName  numChecks numImgs numRevs   timeadded
markerDetails STRUCTURE:
id  latitude  longitude  locAdd  locHrs  locPh  locSt  locApp  locMsg  locMn

因此,所需的输出应为:

id (of markers), latitude, longitude, whoAdded, locationType, locationName, 
numChecks, numImgs, numRevs, locAdd, locHrs, locPh, locSt, locApp, locMsg, locMn

尝试:

SELECT m.id,
       m.latitude,
       m.longitude,
       m.whoAdded,
       m.locationType,
       m.locationName,
       m.numChecks,
       m.numImgs,
       m.numRevs,
       md.locAdd,
       md.locHrs,
       md.locPh,
       md.locSt,
       md.locApp,
       md.locMsg,
       md.locMn
  FROM markers as m
  LEFT JOIN markerDetails as md
    on m.latitude = md.latitude
   AND m.longitude = md.longitude
 WHERE m.whoAdded = '$user'

您需要在两个表中进行INNER JOIN。

mysqli_query($link, "SELECT * FROM markers m, markerDetails md where 
    m.latitude=md.latitude AND m.longitude=md.longitude AND m.whoAdded='$user'");

此外,您可以限制上述选择查询中所需的列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM