我有三张桌子。如果存在一组情况,我试图从两个表中提取数据并插入到第三个表中。当我运行查询时,我得到
“#1054 - ‘where 子句’中存在未知列‘rvp_to_registrants_to_events.rvp_to_registrants_id’”
这是我的询问:
INSERT INTO rvp_to_registrants_to_events (rtr.rvp_to_registrants_id, rte.events_id)
SELECT
rtr.rvp_to_registrants_id, rte.events_id
FROM
registrants_to_events rte,rvp_to_registrants rtr
WHERE (
SELECT
rte.registrants_id, rte.events_id,
rtr.rvp_to_registrants_id, rtr.registrants_id
FROM
registrants_to_events rte,rvp_to_registrants rtr
WHERE
rte.registrants_id = rtr.registrants_id
AND (rtr.rvp_to_registrants_id != rvp_to_registrants_to_events.rvp_to_registrants_id
AND rte.events_id != rvp_to_registrants_to_events.events_id)
)
我不明白为什么会出现此错误。我确信这是我忽略的一些愚蠢的事情,但感谢任何帮助。
谢谢!
根据迈克尔的输入,我已更新我的代码如下。现在返回零结果,所以正在努力:
INSERT INTO rvp_to_registrants_to_events (rvp_to_registrants_id, events_id)
SELECT
rtr.rvp_to_registrants_id, rte.events_id
FROM
registrants_to_events rte
JOIN rvp_to_registrants rtr ON rte.registrants_id = rtr.registrants_id
JOIN rvp_to_registrants_to_events rtrte ON rtr.rvp_to_registrants_id = rtrte.rvp_to_registrants_id
WHERE
rte.registrants_id = rtr.registrants_id
AND
(rtr.rvp_to_registrants_id != rtrte.rvp_to_registrants_id
AND
rte.events_id != rtrte.events_id)
该错误看起来是因为您在
rvp_to_registrants_to_events
子句中引用了 WHERE
,但未将其包含在 FROM
中:
FROM
registrants_to_events rte,rvp_to_registrants rtr, rvp_to_registrants_to_events
WHERE
rte.registrants_id = rtr.registrants_id
AND (rtr.rvp_to_registrants_id != rvp_to_registrants_to_events.rvp_to_registrants_id
AND rte.events_id != rvp_to_registrants_to_events.events_id)
我建议使用正确的
JOIN
语法重新定义它:
FROM
registrants_to_events rte
JOIN rvp_to_registrants rtr ON rte.registrants_id = rtr.registrants_id
JOIN rvp_to_registrants_to_events ON rtr.registrants_id = rvp_to_registrants_to_events.registrants_id
-- --------------------supply the correct ON clause relationship ^^^^^^^^^^^^^^^^^^^
WHERE
-- actual selection criteria
您需要向
ON
子句提供实际的列关系来代替 ON rtr.registrants_id = rvp_to_registrants_to_events.registrants_id
。 JOIN
假设 rvp_to_registrants_to_events
和 rte
或 rtr
之间有一个公共列,但我不清楚。
在你的from中因为你有: 注册者_至_事件 rte、rvp_至_注册者 rtr
在您的where导致您使用该表: rvp_to_registrants_to_events
这张表应该在您的from事业中
首先,学习在代码中使用“JOIN”语句和表别名。它不仅使其更易于使用,而且易于理解。本质上,你的 sql 无论如何都会这样做,但有它自己的解释。