选择中的MySQL子查询,返回多列

选择中的MySQL子查询,返回多列,mysql,Mysql,我正在处理两张桌子位置和美国代码 位置包含用户坐标和行驶速度 us_zipcodes包含美国境内的所有城市及其zipcodes和坐标 这里的目标是返回用户的纬度、经度、速度和最近的城市 在我的select中,我试图在select子查询中从us\zipcodes返回两列。我知道有人可能会建议加入,但我的情况不允许在上使用 子查询根据与us_zipcodes表中城市坐标最接近的用户坐标选择城市 我想知道我想做的事情是否可行,如果可能,正确的语法 我的尝试如下。先谢谢你 SELECT l.la

我正在处理两张桌子<代码>位置和
美国代码

位置
包含用户坐标和行驶速度

us_zipcodes
包含美国境内的所有城市及其zipcodes和坐标

这里的目标是返回用户的纬度、经度、速度和最近的城市

在我的select中,我试图在select子查询中从
us\zipcodes
返回两列。我知道有人可能会建议加入,但我的情况不允许在上使用

子查询根据与
us_zipcodes
表中城市坐标最接近的用户坐标选择城市

我想知道我想做的事情是否可行,如果可能,正确的语法

我的尝试如下。先谢谢你

SELECT
    l.lat,
    l.lng,
    l.speed
    (
        SELECT
            CONCAT(city, ' ', state_abrv) AS nearest, 
            (
                3959 * 
                acos( 
                    cos( radians( l.lat ) ) * 
                    cos( radians( lat ) ) * 
                    cos( 
                        radians( lng ) - 
                        radians( l.lng ) 
                    ) + 
                    sin( radians( l.lat ) ) * 
                    sin( radians( lat ) ) 
                ) 
            ) AS distance
        FROM
            us_zipcodes
        ORDER BY
            distance ASC
        LIMIT 0, 1
    ) AS nearest, distance
FROM
    location AS l
WHERE
    l.userID = :userID
编辑:我的表格结构如图所示

表:
位置

ID      |       lat         |       lng         |       speed       |       userID  
___________________________________________________________________________________
1       |       55.159399   |       -74.98976   |       35          |       1       
2       |       45.168399   |       -52.56476   |       45          |       2       
3       |       64.593399   |       -64.32576   |       55          |       3       
4       |       98.193399   |       -72.81176   |       65          |       4       
表:
us\u zipcodes

ID      |       city        |       state_abrv      |       lat     |       lng
______________________________________________________________________________________
1       |       Foo City    |       MI              |       45.3265 |       -81.98747
2       |       Bar City    |       AK              |       65.3265 |       -65.98747
3       |       Fake City   |       FL              |       25.3265 |       -75.98747
4       |       Smith City  |       MI              |       64.3265 |       -89.98747

也许像这样的东西能帮上忙

SELECT
  state_abrv,
  city,
  3959 * acos(
      cos( radians( (SELECT lat FROM location WHERE userID = :userID) ) ) *
      cos( radians( lat ) ) *
      cos(
          radians( lng ) -
          radians( (SELECT lng FROM location WHERE userID = :userID) )
      ) +
      sin( radians( (SELECT lat FROM location WHERE userID = :userID) )) *
      sin( radians( lat ) )
  ) AS distanse,
  (SELECT lng FROM location WHERE userID = :userID) as lng,
  (SELECT lat FROM location WHERE userID = :userID) as lat,
  (SELECT speed FROM location WHERE userID = :userID) as speed

FROM us_zipcodes ORDER BY distanse LIMIT 1;
或者只是两个单独的子查询

SELECT
  l.lat,
  l.lng,
  l.speed,
  (SELECT (3959 * acos(
                cos(radians(l.lat)) *
                cos(radians(lat)) *
                cos(radians(lng)-radians(l.lng)) +
                sin(radians(l.lat)) *
                sin(radians(lat)))
  ) 
   FROM us_zipcodes
   ORDER BY distance ASC
   LIMIT 0, 1
  ) AS distance,
  (SELECT CONCAT(city, ' ', state_abrv)
   FROM us_zipcodes
   WHERE 3959 *
         acos(cos(radians(l.lat)) * cos(radians(lat)) *
             cos( radians(lng) - radians(l.lng)) +
             sin(radians(l.lat)) *
             sin(radians(lat))
         ) = distance)  AS nearest
FROM
  location AS l
WHERE
  l.userID = :userID;

您能提供您的表格结构吗?我的情况不允许在
上使用
。为什么不呢?因为这两个表中没有共享列。没有联系。内部联接中的选择基于与外部查询的lat和lng相比的最近坐标。