[英]MYSQL FULL JOIN simulation query, unexpected result
我有两个表,markers和markerDetails。 我想将markerDetails行中的marker值附加到行中,如果不存在markerDetails则为NULL值。 两者的共同列是经度和纬度。 我用LEFT JOIN
和RIGHT 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.