我正在尝试将一些旧的MySQL查询移植到PostgreSQL,但我在使用这个查询时遇到了问题:
DELETE FROM logtable ORDER BY timestamp LIMIT 10;
PostgreSQL在其delete语法中不允许排序或限制,并且表没有主键,所以我不能使用子查询。此外,我希望保留查询完全删除给定数字或记录的行为--例如,如果表包含30行,但它们都具有相同的时间戳,我仍然希望删除10行,尽管哪10行并不重要。
那么,如何在PostgreSQL中使用排序功能删除固定数量的行呢?
编辑:没有主键表示没有log_id列或类似的列。啊,遗留系统的乐趣!
我必须选择表中的所有行(让我们称之为mytable),对于这些行,给定列中的值(我们称之为mycolumn)是而不是等于'A‘,not等于'S’。
所以我试了一下
SELECT * FROM mytable WHERE mycolumn NOT ILIKE ANY(ARRAY['A','S'])
我更喜欢使用ILIKE而不是=来测试字符串等式,因为值'A‘和'S’在我的数据中可能是小写的,所以我希望将值's‘和'a’也排除在外。
奇怪的是,上面的查询确实返回了一些在mycolumn中值等于'A‘的行。我很惊
检查整数列是否包含特定值的性能最快的方法是什么?
在PostgreSQL8.4中,我有一个有1000万行的表。我至少要每秒钟检查10000次。目前,我正在执行查询SELECT id FROM table WHERE id = my_value,然后检查DataReader是否有行。但是它很慢。有没有办法在不将整个列加载到内存的情况下加快速度?
我试图在where子句中计算PostgreSQL中的正则表达式。
我有一个值类似于下面示例(1,2)的列。当我在where子句中写入查询时,我将参数值传递为“a”“”或"a,b“或"b”,那么它应该只返回包含“a”或"a,b“或"b”的行。
当我传递"a"时,它应该检查行值并计算" and“、"OR”条件。
例:1
((((a.b.city == "x" AND a.b.state == "y" AND a.b.country == "z")) OR
(dis(x.y.d1,
我有张桌子看起来像这样:
stuff
id integer
content text
score double
children[] (an array of id's from this same table)
我想运行一个查询,该查询选择给定id的所有子行,然后立即获得所有这些子行的完整行,并按分数排序。
对最好的方法有什么建议吗?我已经对递归进行了研究,但我不确定这是否可行。尝试在postgresql上投递,但没有运气。
我想找一个用户最喜欢的音乐列表。第一步,我从用户的id表查询所有的favorite。在接下来的步骤中,我将通过id从songs表查询音乐列表。但是现在我想按照时间戳列favorite.added_at desc对行进行排序。
我不想加入表,所以我想知道是否可以在查询中按输入id进行排序。
例如:
-- the 3087 is first record
select *
from songs s
where id in (3087,5122)
-- the 5122 is first record
select *
from songs s
where id in (5122,3087)
我尝试从我的PostgreSQL数据库中获取单词计数,以生成一个单词云类型的视图。我希望能利用ts_vectors的内置效率。我看到有一个ts_stats函数,它在给定ts_vector列的情况下返回词位及其频率的列表。
返回的行如下所示:
word ndoc nentry
studi 322 43434
compani 233 2322
查询看起来像这样:
SELECT * FROM ts_stat('SELECT tsv from doc')
ORDER BY nentry DESC, ndoc DESC, word
LIMIT 10
但是
使用PostgreSQL 9.6.12。
给定一个作者有很多博客文章。
当我运行下面的查询时,我会为每个相关的post获得一行。
SELECT authors.id
FROM authors
LEFT JOIN posts ON authors.id = posts.author_id
当我运行以下代码时,我只得到每个作者的一行:
SELECT authors.*
FROM authors
LEFT JOIN posts ON authors.id = posts.author_id
但是,当我对其中任何一个运行计数时,都会得到较高的行计数。所有岗位的计数。
当我使用通配符选择所有列时,为什么
我发现PostgreSQL类似于操作符的工作方式有点奇怪。我意外地在下面的查询中签下了空格,但对结果感到惊讶。
select 'Device Reprocessing' similar to '%( )%' --return true select 'Device Reprocessing' similar to '%()%' --return true select 'DeviceReprocessing' similar to '%()%' --return true
为什么第二次和第三次查询返
为什么当user_id列在profile表中不存在时,这个查询会删除所有用户?
初始查询
DELETE FROM users
WHERE user_id IN (
SELECT user_id FROM profile
)
AND user_id != 35
AND user_id != 6;
更具体地说。
IN语句查询返回:
SELECT user_id FROM profile;
ERROR: column "user_id" does not exist
LINE 1: SELECT user_id FROM
我有以下查询:
select case when count(*)>0 then true else false end
from tab
where param in ('a','b') and position('T' in listofitem)>0
这将检查'T'是否存在于listofitem列中,如果存在,计数为> 0。基本上是对子字符串的搜索。
这在这个私人案件中很有效。然而,我的实际情况是,我有text[]调用sub_array,这意味着要检查多个值。如何修改查询以处理sub_array类型?我更喜
查询
SELECT COUNT(*), name, number
FROM tbl
GROUP BY name, number
HAVING COUNT(*) > 1
它有时找不到小写和大写之间的重复项。
例如:sunny和Sunny不会重复出现。
那么如何在两列的PostgreSQL中找到所有可能的重复项呢?
早些时候,我们使用Mysql版本5.5.27和以下查询
SELECT S.StudentId,
SED.StudentEnrollmentDetailsId,
FirstName, MiddleName, LastName, Address, PermanentAddress,
GROUP_CONCAT(B.BatchName ORDER BY B.BatchId,B.IsVirtualBatch DESC) AS AllBatch
FROM Student S
INNER JOIN StudentEnrollmentDetails
因此,我在MySQL中有一个数据库表,其中有一个包含字符串的列。给定一个目标字符串,我希望找到目标中包含子字符串的所有行,即目标字符串是该列的超字符串的所有行。目前,我使用的查询是这样的:
SELECT * FROM table WHERE 'my superstring' LIKE CONCAT('%', column, '%')
我担心的是这将无法扩展。我目前正在做一些测试,看看这是不是一个问题,但我想知道是否有人有任何建议的替代方法。我简要介绍了MySQL的全文索引,但这似乎也是为了查找数据中的子字符串,而不是找出数据是否存在于给定的字符串
我目前正在尝试更新表中的所有行,方法是根据同一行中另一列images的值设置一列source_images的值。
for row in Cars.query.all():
# Generate a list of strings
images = [s for s in row.source_images if 'example.com/' in s]
# Column 'images' being updated is a sqlalchemy.dialects.postgresql.ARRAY(Text())
Cars.qu
我知道索引内部是B树或类似的树结构。假设为3列(a,b,c)构建索引,我希望Postgres:
在B树中找到键a=10,b=20,c=30,
扫描下10个条目并返回它们。
如果索引只有一列,那么解决方案是显而易见的:
select * from table1
where a >= 10
order by a limit 10
但是,如果有更多的列,解决方案就会变得更加复杂。2栏:
select * from table1
where a > 10 or (a = 10 and b >= 20)
order by a, b limit 10
3栏:
select