我正在尝试从我的数据库中的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'.
任何团体都有一些想法吗?
答案 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
或其他内容。