我的 table 是:
- tbl_activity(id, 名称)
- tbl_activity_package(id、activity_id、名称)
- tbl_activity_package_address(id,activity_package_id,地区)
用户给出一个地区,我返回该地区发生的事件列表。根据事件可能有多个地区,因此我稍后必须通过 GROUP_CONCAT()
返回它。
SELECT a.name, ap.name
FROM (
SELECT apa_inner.activity_package_id AS activity_package_id
FROM tbl_activity_package_address AS apa_inner
WHERE district = 'Beja'
) AS apa
INNER JOIN (
SELECT ap_inner.id, ap_inner.name, ap_inner.activity_id
FROM tbl_activity_package_address AS apa_inner
INNER JOIN tbl_activity_package AS ap_inner ON ap_inner.id = apa.activity_package_id
) AS ap ON apa.activity_package_id = ap.id
INNER JOIN tbl_activity AS a ON a.id = ap.activity_id
这给了我错误:“'on'子句中的未知列'apa.activity_package_id
'”。
SELECT a.name, ap.name
FROM (
SELECT id, activity_package_id
FROM tbl_activity_package_address AS apa_inner
WHERE district = 'Beja'
) AS apa
INNER JOIN (
SELECT ap_inner.id AS id, ap_inner.name, ap_inner.activity_id
FROM tbl_activity_package_address AS apa_inner
INNER JOIN tbl_activity_package AS ap_inner ON ap_inner.id = apa_inner.activity_package_id
WHERE apa_inner.id = apa.id
) AS ap ON apa.activity_package_id = ap.id
INNER JOIN tbl_activity AS a ON a.id = ap.activity_id
这给了我错误:“where 子句中存在未知列 'apa.id
'”。
最佳答案
旧答案
在第二个子选择中,您使用别名 apa_inner
和 ap_inner
所以
SELECT a.name, ap.name
FROM (
SELECT apa_inner.activity_package_id AS activity_package_id
FROM tbl_activity_package_address AS apa_inner
WHERE district = 'Beja'
) AS apa
INNER JOIN (
SELECT ap_inner.id AS id
FROM tbl_activity_package_address AS apa_inner
INNER JOIN tbl_activity_package AS ap_inner ON ap_inner.id = apa_inner.activity_package_id
) AS ap ON apa.activity_package_id = ap.id
INNER JOIN tbl_activity AS a ON a.id = ap.activity_id
应该修复错误。但你真的需要这些子选择吗?我相信您可以简化这个查询。
<小时/>新答案
来自
tbl_activity(id, name) tbl_activity_package(id, activity_id, name) tbl_activity_package_address(id, activity_package_id, district)
结果应生成具有某个包裹地址位于某个地区的所有包裹的所有事件,以及该事件涵盖的所有地区的列表。
这个查询就可以了
SELECT
a.name,
GROUP_CONCAT(DISTINCT apa.district ORDER BY apa_district) AS distritos
FROM
tbl_activity a
INNER JOIN
tbl_activity_package ap
ON
a.id = ap.activity_id
INNER JOIN
tbl_activity_package_address apa
ON
ap.id = apa.activity_package_id
WHERE a.id IN (
SELECT
ap_inner.activity_id
FROM
tbl_activity_package AS ap_inner
INNER JOIN
tbl_activity_package_id apa_inner
ON
ap_inner.id = apa_inner.activity_package_id
WHERE
apa_inner.district = 'Beja'
)
GROUP BY
a.name
关于mysql - 来自另一个子选择的子选择字段有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23585041/