我有這兩個查詢無法執行工會,得到#1248 - 每一個派生表必須有它自己的別名錯誤
select
t . *, events.event_time as last_time
from
events,
(
(
select
bonding.type,
bonding.global_id2 as target_post,
bonding.target_id as on_whose_post,
GROUP_CONCAT(bonding.shooter_id) as shooter_ids,
GROUP_CONCAT(bonding.what_global_id) as shooted_what,
MAX(bonding.what_global_id) as last,
'bonding' as flag
from
bonding
where
bonding.type = 1
and bonding.shooter_id in (select
`user2`
from
relation_table
where
`user1` = 192)
group by bonding.global_id2
)
union
(
select
bonding.type,
bonding.global_id2 as target_post,
bonding.target_id as on_whose_post,
GROUP_CONCAT(bonding.shooter_id) as shooter_ids,
GROUP_CONCAT(bonding.what_global_id) as shooted_what,
MAX(bonding.what_global_id) as last,
'bonding' as flag
from
bonding
where
bonding.type = 2
and bonding.shooter_id in (select
`user2`
from
relation_table
where
`user1` = 192)
group by bonding.global_id2
)
union
(
select
bonding.type,
bonding.global_id2 as target_post,
bonding.target_id as on_whose_post,
GROUP_CONCAT(bonding.shooter_id) as shooter_ids,
GROUP_CONCAT(bonding.what_global_id) as shooted_what,
MAX(bonding.what_global_id) as last,
'bonding' as flag
from
bonding
where
bonding.type = 5
and bonding.shooter_id in (select
`user2`
from
relation_table
where
`user1` = 192)
group by bonding.global_id2
)
union
(
select
bonding.type,
bonding.global_id2 as target_post,
bonding.target_id as on_whose_post,
GROUP_CONCAT(bonding.shooter_id) as shooter_ids,
GROUP_CONCAT(bonding.what_global_id) as shooted_what,
MAX(bonding.what_global_id) as last,
'bonding' as flag
from
bonding
where
bonding.type = 9
and bonding.shooter_id in (select
`user2`
from
relation_table
where
`user1` = 192)
group by bonding.global_id2
)
union
(
select
bonding.type,
bonding.global_id2 as target_post,
bonding.target_id as on_whose_post,
GROUP_CONCAT(bonding.shooter_id) as shooter_ids,
GROUP_CONCAT(bonding.what_global_id) as shooted_what,
MAX(bonding.what_global_id) as last,
'bonding' as flag
from
bonding
where
bonding.type = 10
and bonding.shooter_id in (select
`user2`
from
relation_table
where
`user1` = 192)
group by bonding.global_id2
)
)as t where events.global_id = t1.last
等一個: -
SELECT
post_stream.type,
post_stream.ref_global_id as target_post,
post_stream.user_id as on_whose_post,
post_stream.user_id as shooter_ids,
post_stream.ref_global_id as shooted_what,
post_stream.ref_global_id as last,
'stream' as flag,
events.event_time as last_time
FROM
post_stream,
events,
relation_table
WHERE
events.global_id = post_stream.ref_global_id
and post_stream.type IN (2 , 3, 7, 8)
AND post_stream.user_id = relation_table.user2
AND relation_table.user1 = 192
現在我需要執行兩個查詢的聯合以獲得組合結果,但它給出了 每個派生表都必須有它自己的別名錯誤,我應該爲派生表放置一個別名,這兩個查詢在單獨運行時運行時沒有錯誤。
它要求你在你的第一個查詢(每個'UNION(SELECT ...)'語句,包括第一個'SELECT'中別名子查詢,你也可以用完全相同的方式別名第二個查詢 – dash
我是一些如何能夠解決問題,但這個查詢需要40秒完成...... – manish
您需要停止使用'FROM a,b,c WHERE ... AND ...'表示法並使用顯式的'FROM a JOIN b ON ... JOIN c ON ...'表示法,你需要知道其他的存在,這樣你就可以讀取在90年代寫入的查詢,當JOIN的支持並不總是可用時,你絕不應該寫它自己 –