这几乎看起来像是一个范围问题 - 子查询中的 select 语句无法识别表“candidate”:
SELECT
candidate.id AS id,
candidate.image AS image,
candidate.name AS name,
candidate.party AS party,
player.order AS player_order,
c_pcts.pct AS pct
FROM `candidate`
INNER JOIN players player ON player.candidate_id = candidate.id
INNER JOIN lineups lineup ON player.lineup_id = lineup.id
INNER JOIN (
SELECT
pct
FROM candidate_pcts p
INNER JOIN weekly_game game ON p.weekly_game_id = (
SELECT id FROM weekly_game ORDER BY date DESC LIMIT 1
) WHERE p.candidate_id = candidate.id
) c_pcts
WHERE lineup.id = '31'
ORDER BY player.order ASC
给出错误:“‘where 子句’中存在未知列‘candidate.id’。”如果我输入的是“FROM Candidate_pcts p”
FROM candidate_pcts p, candidate c
然后它就看不到“p.weekly_game_id”...嗯?
似乎我需要以某种方式识别子查询的“候选”表,但我尝试的一切只会让我进一步误入歧途。我尝试了很多乱七八糟的事情:表格的顺序,在我能想到的任何地方明确标识它们,反引号。我应该注意到,嵌套子查询的工作方式就像一个魅力。又来了:
SELECT
pct
FROM `candidate_pcts`
INNER JOIN weekly_game game ON candidate_pcts.weekly_game_id = (
SELECT id FROM weekly_game ORDER BY date DESC LIMIT 1
) WHERE candidate_pcts.candidate_id = '5'
当然,那里有一个硬编码的 id 值。如果需要的话我可以在这里提供数据库结构,但这已经很长了。 “weekly_game”表只是每个候选人每周的一组分数,我们只需要最近一周的分数,因此有“ORDER BY date DESC LIMIT 1”子句。
非常感谢您抽出时间。
<小时/>表格:
- 表
候选人
:{
id
,图像
,名称
,政党
} - 表
candidate_pcts
:{
id
、candidate_id
、pct
、weekly_game_id
} - 表
阵容
:{
id
,日期,user_id
} - 表格
球员
:{
id
,candidate_id
,lineup_id
,order
} - 表格
weekly_game
:{
id
,日期
}
最佳答案
您基本上在解决问题上处于正确的轨道上。本质上,嵌套子选择不知道 candidate.id
。如果您分解查询并只查看相关的子选择:
SELECT
pct
FROM candidate_pcts p
INNER JOIN weekly_game game ON p.weekly_game_id = (
SELECT id FROM weekly_game ORDER BY date DESC LIMIT 1
) WHERE p.candidate_id = candidate.id
您可以看到,除了 where 子句之外,该查询中没有对 candidate
表的任何引用,因此这是一个未知列。
由于子选择本质上是在引用它的外部选择之前进行的,因此子选择必须是独立的可执行查询。
关于mysqli子查询未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31082226/