我想通过指定innertable.id = outertable.id为内部查询提供WHERE条件.但是,MySQL(5.0.45)在'where子句'中报告"未知列'outertable.id'".这种查询是否可行?
内部查询使用GROUP BY将行旋转到列.这可以完全在外部查询中执行,但由于额外的连接可能会产生额外的开销.
或者,我可以在内部查询中省略WHERE条件,而是指定一个ON outertable.id = innerquery.id,但它会获取整个内部查询行集再次连接外部,这是低效的.
实际的SQL如下所示:
select t.ticketid, u.userid, t.fullname, u.loginapi_userid, t.email, tp.subject, tp.contents, a.PhoneNumber, a.Location, a.Extension, a.BusinessUnit, a.Department
from swtickets t
inner join swticketposts tp on t.ticketid = tp.ticketid
inner join swusers u on t.userid = u.userid
left join
(
select
cfv.typeid,
min(case cfv.customfieldid when 1 then cfv.fieldvalue end) as 'PhoneNumber',
min(case cfv.customfieldid when 3 then cfv.fieldvalue end) as 'Location',
min(case cfv.customfieldid when 5 then cfv.fieldvalue end) as 'Extension',
min(case cfv.customfieldid when 8 then cfv.fieldvalue …Run Code Online (Sandbox Code Playgroud) 我需要为每个不同的记录选择几行.几乎所谓的问题在SQL Server 2008中为每个不同的ID选择前n条记录,尽管我使用的是MySQL.
这个目的可以通过在这种情况下运行21个查询来实现:1个general和20个来获取子记录,即这样的事情:
SELECT DISTINCT `user_id`
FROM `posts`
WHERE `deleted` = '0'
ORDER BY `user_id` ASC
LIMIT 20
Run Code Online (Sandbox Code Playgroud)
...选择所需的所有行,然后
SELECT *
FROM `posts`
WHERE `deleted` = '0'
AND `user_id` = ?
ORDER BY `id` DESC
LIMIT 5
Run Code Online (Sandbox Code Playgroud)
...在第一个查询选择的每一行的循环中.
基本上,我需要每个用户获得5个帖子.我需要在一个查询中完成此操作.该posts设置是只是举例,我做了这件事所以它,希望,更容易理解我需要什么.
我从以下查询开始:
SELECT *
FROM `posts`
WHERE `user_id`
IN (
SELECT DISTINCT `user_id`
FROM `posts`
ORDER BY `user_id` DESC
LIMIT 4
)
LIMIT 5
Run Code Online (Sandbox Code Playgroud)
但是我得到了#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME …
我有一个mysql表,我需要在添加其他记录之前只包含20条最新记录.每天都会添加新行,因此我希望首先删除任何大于最早允许的记录.
该表包含一个自动增量"id"列,因此我可以轻松确定哪个是最早的记录.
谢谢你的帮助.
我无法找到这是可能的,所以,有没有选择限制GROUP_CONCATMySQL函数?
例如:
GROUP_CONCAT(ColName ORDER BY ColName DESC LIMIT 5)
Run Code Online (Sandbox Code Playgroud)
我不想使用子查询,因为这会严重降低性能.我可以稍后在PHP中对数组进行切片,但我想知道还是MySQL已经可以选择在MySQL中实现这一点.