MySQL“每个派生表都必须有自己的别名”
我对这种奇怪的行为感到有点困惑。我收到了一个可怕的消息:每个派生表都必须有自己的别名错误 通常,我可以通过在主SELECT语句中添加AS子句来避免这种情况,但是下面的示例不起作用:MySQL“每个派生表都必须有自己的别名”,mysql,sql,Mysql,Sql,我对这种奇怪的行为感到有点困惑。我收到了一个可怕的消息:每个派生表都必须有自己的别名错误 通常,我可以通过在主SELECT语句中添加AS子句来避免这种情况,但是下面的示例不起作用: SELECT SUM (`a`.`total`) AS `total` FROM ( SELECT COUNT(DISTINCT(`item_sales`.`id`)) AS `total`, (SELECT COUNT(DISTINCT(`sale_item`)) AS `offers` FROM
SELECT SUM (`a`.`total`) AS `total` FROM (
SELECT COUNT(DISTINCT(`item_sales`.`id`)) AS `total`,
(SELECT COUNT(DISTINCT(`sale_item`)) AS `offers` FROM `item_sales_bids` WHERE `user_id` = 2) AS `offers`
FROM `item_sales`
INNER JOIN `item_sales_bids` ON `item_sales`.`id` = `item_sales_bids`.`sale_item`
WHERE `item_sales`.`buyer` != 2
AND `item_sales`.`sold` = 1
GROUP BY `item_sales`.`id`
HAVING `offers` > 0
) UNION (
SELECT COUNT(*) AS `total`,
`item_sales`.`reserve`,
(SELECT COUNT(*) FROM `item_sales_bids` WHERE `user_id` = 2) AS `bids`,
(SELECT MAX(`max_bid`) AS `max` FROM `item_sales_bids` WHERE `user_id` = 2) AS `maxBid`,
SUM((`item_sales`.`list_date` + (`item_sales`.duration * 86400)) - UNIX_TIMESTAMP()) AS `endTime`
FROM `item_sales`
INNER JOIN `item_sales_bids` ON `item_sales_bids`.`sale_item` = `item_sales`.`id`
GROUP BY `item_sales`.`id`
HAVING `endTime` < 0
AND `maxBid` < `item_sales`.`reserve`
)
) `a`
有人能指出我遗漏了什么吗?请注意,将别名添加到联接会导致相同的错误。您应该在子查询中放置UNION关键字,如下所示
SELECT SUM (`a`.`total`) AS `total`
FROM (
SELECT COUNT(DISTINCT(`item_sales`.`id`)) AS `total`,
(SELECT COUNT(DISTINCT(`sale_item`)) AS `offers` FROM `item_sales_bids` WHERE `user_id` = 2) AS `offers`
FROM `item_sales`
INNER JOIN `item_sales_bids` ON `item_sales`.`id` = `item_sales_bids`.`sale_item`
WHERE `item_sales`.`buyer` != 2
AND `item_sales`.`sold` = 1
GROUP BY `item_sales`.`id`
HAVING `offers` > 0
UNION
SELECT COUNT(*) AS `total`,
`item_sales`.`reserve`,
(SELECT COUNT(*) FROM `item_sales_bids` WHERE `user_id` = 2) AS `bids`,
(SELECT MAX(`max_bid`) AS `max` FROM `item_sales_bids` WHERE `user_id` = 2) AS `maxBid`,
SUM((`item_sales`.`list_date` + (`item_sales`.duration * 86400)) - UNIX_TIMESTAMP()) AS `endTime`
FROM `item_sales`
INNER JOIN `item_sales_bids` ON `item_sales_bids`.`sale_item` = `item_sales`.`id`
GROUP BY `item_sales`.`id`
HAVING `endTime` < 0
AND `maxBid` < `item_sales`.`reserve`
) `a`
可以在子查询中包含UNION
SELECT SUM (`a`.`total`) AS `total`
FROM
(
--- your first query
UNION
--- your second query
) a
恐怕不行。。。1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第24行“a”附近使用的正确语法。如果要获取总数,为什么需要在子查询中使用其他内联子查询?