MySQL 使用相同的子查询 table
MySQL Subquery using the same table
我正在尝试使用列 == 列的子查询从同一个 table 检索一些 ID。
SELECT
`assemblies`.`id`,
`assemblies`.`type`,
`assemblies`.`champion`,
`assemblies`.`name`,
`assemblies`.`author`,
`assemblies`.`githubLastmod`,
(assemblies.forum IS NOT NULL) AS forumExists,
(SELECT GROUP_CONCAT(`champion`) FROM `assemblies` WHERE `githubFolder` = `githubFolder`) AS champions,
(SELECT COUNT(*) FROM `votes` WHERE `assembly` = `assemblies`.`id`) AS votesCount,
(SELECT COUNT(*) FROM `install_clicks` WHERE `assembly` = `assemblies`.`id`) AS installCount,
(SELECT COUNT(*) FROM `github_clicks` WHERE `assembly` = `assemblies`.`id`) AS githubCount,
(SELECT COUNT(*) FROM `forum_clicks` WHERE `assembly` = `assemblies`.`id`) AS forumCount,
(SELECT COUNT(*) FROM `broken_assemblies` WHERE `assembly` = `assemblies`.`id` AND `ip` = '192.168.10.1') AS isBroken,
(SELECT COUNT(*) FROM `votes` WHERE `assembly` = `assemblies`.`id` AND `ip` = '192.168.10.1') AS isUpvoted
FROM
`assemblies`
WHERE
`assemblies`.`type` = 'champion'
AND `assemblies`.`champion` = '84'
AND UNIX_TIMESTAMP(DATE(assemblies.githubLastmod)) > '1419617372'
ORDER BY `votesCount` DESC , `githubLastmod` DESC
这部分:
(SELECT GROUP_CONCAT(`champion`) FROM `assemblies` WHERE `githubFolder` = `githubFolder`) AS champions,
这 returns 来自所有行的 champion
,如果 githubAddress 匹配,我只想要 champion
。
(我尽力解释了哈哈,如果您需要更多信息,请评论)
我们需要 GROUP BY githubFolder
而不是 WHERE githubFolder = githubFolder
如果我们单独执行它,它将完全满足我们在这里想要实现的目标
(SELECT GROUP_CONCAT('champion') FROM assemblies GROUP BY githubFolder) AS champions
但是如果这将作为子查询执行,它将抛出错误,因为它 returns 多于一行
我正在尝试使用列 == 列的子查询从同一个 table 检索一些 ID。
SELECT
`assemblies`.`id`,
`assemblies`.`type`,
`assemblies`.`champion`,
`assemblies`.`name`,
`assemblies`.`author`,
`assemblies`.`githubLastmod`,
(assemblies.forum IS NOT NULL) AS forumExists,
(SELECT GROUP_CONCAT(`champion`) FROM `assemblies` WHERE `githubFolder` = `githubFolder`) AS champions,
(SELECT COUNT(*) FROM `votes` WHERE `assembly` = `assemblies`.`id`) AS votesCount,
(SELECT COUNT(*) FROM `install_clicks` WHERE `assembly` = `assemblies`.`id`) AS installCount,
(SELECT COUNT(*) FROM `github_clicks` WHERE `assembly` = `assemblies`.`id`) AS githubCount,
(SELECT COUNT(*) FROM `forum_clicks` WHERE `assembly` = `assemblies`.`id`) AS forumCount,
(SELECT COUNT(*) FROM `broken_assemblies` WHERE `assembly` = `assemblies`.`id` AND `ip` = '192.168.10.1') AS isBroken,
(SELECT COUNT(*) FROM `votes` WHERE `assembly` = `assemblies`.`id` AND `ip` = '192.168.10.1') AS isUpvoted
FROM
`assemblies`
WHERE
`assemblies`.`type` = 'champion'
AND `assemblies`.`champion` = '84'
AND UNIX_TIMESTAMP(DATE(assemblies.githubLastmod)) > '1419617372'
ORDER BY `votesCount` DESC , `githubLastmod` DESC
这部分:
(SELECT GROUP_CONCAT(`champion`) FROM `assemblies` WHERE `githubFolder` = `githubFolder`) AS champions,
这 returns 来自所有行的 champion
,如果 githubAddress 匹配,我只想要 champion
。
(我尽力解释了哈哈,如果您需要更多信息,请评论)
我们需要 GROUP BY githubFolder
而不是 WHERE githubFolder = githubFolder
如果我们单独执行它,它将完全满足我们在这里想要实现的目标
(SELECT GROUP_CONCAT('champion') FROM assemblies GROUP BY githubFolder) AS champions
但是如果这将作为子查询执行,它将抛出错误,因为它 returns 多于一行