如何在子查询中添加2个连接?

时间:2011-12-20 18:46:04

标签: sql

我正在尝试从我的数据库中的3个表中获取信息。我想要获得4个领域。 ' kioskid',' kioskhours',' videotime',' sessiontime'。为了做到这一点,我正在尝试在子查询中加入。这就是我到目前为止所做的:

SELECT k.kioskid, k.hours, v.time, s.time
FROM `nsixty_kiosks` as k
LEFT JOIN (SELECT time
FROM `nsixty_videos` 
ORDER BY videoid) as v
ON kioskid = k.kioskid LEFT JOIN
(SELECT kioskid, time
FROM `sessions` 
ORDER BY pingid desc LIMIT 1) as s ON s.kioskid = k.kioskid
WHERE hours is NOT NULL

当我运行此查询时,它可以工作,但它显示每一行而不是仅显示每个kiosk id的最后一行。这是基于行'ORDER BY pingid desc LIMIT 1'.

显示的

任何团体都有一些想法吗?

2 个答案:

答案 0 :(得分:0)

嗯,你在'v'子查询上的加入实际上并没有引用'v'子查询,'v'子查询甚至也没有包含到JOIN的kioskid字段,所以这无疑是问题

为了更进一步,我们需要查看架构和示例数据。

答案 1 :(得分:0)

您可以使用相关子查询,而不是加入s

SELECT k.kioskid,
       k.hours,
       v.time,
       ( SELECT time
           FROM sessions
          WHERE sessions.kioskid = k.kioskid
          ORDER
             BY pingid DESC
          LIMIT 1
       )
  FROM nsixty_kiosks AS k
  LEFT
  JOIN ( SELECT time
           FROM `nsixty_videos` 
          ORDER BY videoid
       ) AS v
    ON kioskid = k.kioskid
 WHERE hours IS NOT NULL
;

N.B。我没有修复你的LEFT JOIN (...) AS v,因为我不明白它正在尝试做什么,但它也被打破了; ON子句没有引用它的任何列,并且在子查询中有一个ORDER BY没有意义,除非你还有一个LIMIT或其他内容。