[英]What's wrong with subselect field from another subselect?
我的表是:
用戶給出一個地區,我返回該地區發生的活動的列表。 根據活動可以有一個以上的地區,因此以后我將不得不在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'子句中的Unknown列' 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
選擇中,使用別名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,名稱)tbl_activity_package(id,activity_id,名稱)tbl_activity_package_address(id,activity_package_id,地區)
結果將產生所有具有任何包的活動,並在某個地區包含包地址,並列出該活動覆蓋的所有地區。
這個查詢可以做到
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
嘗試這個
SELECT apa.activity_package_id AS activity_package_id,ap.id, ap.name, ap.activity_id
FROM tbl_activity AS a
INNER JOIN tbl_activity_package AS ap ON a.id = ap.activity_id
INNER JOIN tbl_activity_package_address AS apa ON apa.activity_package_id = ap.id
WHERE district = 'Beja'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.