标签: select

从 SQL select 中的布尔字段返回 int 值

有没有办法在sql select语句中返回布尔字段的int值?

select

5
推荐指数
1
解决办法
3万
查看次数

带有大 WHERE IN 子句的 SELECT 需要很长时间

我对这一切都很陌生,所以要温柔:)。

我有大型医疗数据库,我需要根据选定的医生为患者提取数据。

现在我建立了一个病人名单

SELECT patID 
FROM appointments 
WHERE docID IN ('docid1', 'docid2', ..... , 'docidn') 
Run Code Online (Sandbox Code Playgroud)

一旦我得到我的病人名单,我就会在从一大堆病人相关的表格中提取数据时使用它。

根据我最初的医生名单,我最终可以得到超过 20,000 名的患者名单。系统中的患者总数接近 1,000,000。

然后我拿我的病人名单开始从其他表中获取数据,或多或少是这样的

Select * 
FROM xrays 
WHERE patID IN ('patid1', 'patid2', 'paid3',....., 'patidn' ) 
Run Code Online (Sandbox Code Playgroud)

我根据第一部分中的列表构建了 patids 列表。

可以想象,对于 20,000 名患者列表,上述查询需要很长时间。

关于更好的方法的任何建议?

mysql performance select

5
推荐指数
1
解决办法
8712
查看次数

全文和左连接的慢查询

我有3张桌子

  • 约 250,000 条记录。
  • table1 是 MyISAM,添加带有标题和内容的 fullindex,添加带有 pid 的索引。
  • table2 和 table3 是 InnoDB,用 pid 添加索引。

只查询table3,只需要0.04秒。

select * from table3 
WHERE MATCH (title,content)
AGAINST ('+words' IN BOOLEAN MODE)
ORDER BY pid
Run Code Online (Sandbox Code Playgroud)

但是像这样查询,花费 16.87 秒。

SELECT * 
FROM table1
INNER JOIN table2 ON table1.pid = table2.pid
LEFT JOIN table3 ON table1.pid = table3.pid
WHERE MATCH (table3.title, table3.content)
AGAINST ('+words' IN BOOLEAN MODE)
ORDER BY table3.pid
Run Code Online (Sandbox Code Playgroud)

我为第二个查询制定了一个解释计划,返回:

id select_type  table     type  possible_keys    key    key_len    ref               rows      Extra
1  SIMPLE       table1 …
Run Code Online (Sandbox Code Playgroud)

mysql full-text-search select

5
推荐指数
1
解决办法
7745
查看次数

在 MySQL 中选择 TOP

我怎样才能在 MySQL 中做到这一点?

SELECT TOP 50 PERCENT * FROM table
Run Code Online (Sandbox Code Playgroud)

在不运行单独查询的情况下(如果可能),最简单的方法是什么?

mysql select

5
推荐指数
1
解决办法
1万
查看次数

MySQL 使用新 ID 插入两个表

我正在尝试选择数据库中已有的数据,并使用从表一生成的 ID 将其插入到两个表中。

table1包含配置选项,table2包含定价数据。Table2使用来自 的自动 ID table1

我有所有这些产品,Table1我必须在该表的另一个组中使用相同的配置选项,但 WHMCS 没有配置选项的副本。

我正在考虑进入表格并运行一个选择查询,如下所示:

INSERT INTO tblproductconfigoptionssub 
    (
        id
        , configid
        , optionname
        , sortorder
        , hidden
    ) 
SELECT 
    NULL
    , 76
    , optionname
    , sortorder
    , hidden 
FROM tblproductconfigoptionssub 
WHERE configid = 41
Run Code Online (Sandbox Code Playgroud)

这适用于第一个表中的数据,通过从配置组 ID 41 中选择所有记录并重新插入它们,除了现在它们链接到配置组 76。

表 2 包含定价数据,它有一个名为的列relid,该列链接到从上面的 tblproductconfigoptionssub 生成的 ID。

表 2 已经在其原始 ID 下为表 1 中的项目定价。必须复制 Table2 中的记录,但使用上述查询生成的新 ID。

如何修改上面的语句以将新数据和价格一起插入到 Table2 中?

我真的不想为此做一个 PHP 脚本。但是,我想我需要创建一个 MySQL 函数来从配置组 …

mysql insert transaction select

5
推荐指数
1
解决办法
4838
查看次数

Mysql子查询返回多于1行

SELECT * FROM wp_posts WHERE ID IN 
(
(SELECT courses  FROM wp_category WHERE CatID =401) OR 
(SELECT  meta_value FROM wp_postmeta WHERE  post_id IN (SELECT courses FROM wp_category WHERE CatID =401) AND meta_key ='post_id' )
) 
AND 
ID IN (SELECT post_id FROM wp_locations_courses WHERE location_id = 1120)
Run Code Online (Sandbox Code Playgroud)

我在使用IN子查询时遇到上述查询的问题给了我错误Subquery returns more than 1 row为什么在我使用IN子句时会发生

mysql query subquery select

5
推荐指数
1
解决办法
3万
查看次数

如何在优先查询中使用OR?

在一个简单的查询中

SELECT * 
FROM table
WHERE id='x' OR id='y'
Run Code Online (Sandbox Code Playgroud)

如何优先获得仅其中一个WHERE条款?

我的意思是用id='x'. 仅当没有行时,获取行id='y'

换句话说,id='y'如果有一行则不要使用id='x'

mysql select mysql-5.5

5
推荐指数
1
解决办法
7910
查看次数

搜索 Redis 数据库

想象一下在 Redis 数据库中有一堆散列,每个散列代表一个用户对象。例如,您将如何让用户获得最低注册日期?位置ts_registered最低的用户。我在 redis.io命令页面上搜索了一些,但似乎没有在那里找到它的命令。

我对Redis没有太多经验,我基本上只是在检查它是如何工作的。

select condition redis

5
推荐指数
1
解决办法
2174
查看次数

查询父表并获取子表列

我有两张表,一张继承了另一张:

CREATE TABLE parent (
    col1 INTEGER
);

CREATE TABLE child (
    col2 INTEGER
) INHERITS( parent );

// Insert some data
INSERT INTO parent( col1 ) VALUES( 1 );
INSERT INTO child( col1, col2 ) VALUES( 2, 2 );
Run Code Online (Sandbox Code Playgroud)

有什么方法可以查询父表,使其获取子表的所有列?

此查询仅返回父列:

SELECT * FROM parent;

| col1 |
| ---- |
| 1    |
| 2    |
Run Code Online (Sandbox Code Playgroud)

我想要的查询将返回父和子中的所有列:

SELECT ...  -- some query, with desired result:

| col1 | col2 |
| ---- | ---- |
| 1    | …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design select inheritance

5
推荐指数
1
解决办法
9641
查看次数

“NOT IN”的快速替代方案

我有一个表 A,它有一个名为 id 的字段,它是该表的主键。我还有一个名为 B 的表,它还有一个名为 id 的字段作为主键。

现在我想从表 A 中获取所有行,其中 id 值不作为任何表 B id 字段值中的值存在。

我的第一个查询是这样的:

SELECT a.id FROM a WHERE a.id NOT IN (SELECT DISTINCT b.id FROM b)
Run Code Online (Sandbox Code Playgroud)

然后我构建了一个看起来像这样的查询以提高速度:

SELECT a.id FROM a LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL
Run Code Online (Sandbox Code Playgroud)

现在我在表 A 中得到 600k 行,在表 B 中得到 400k 行,并且事情变得非常缓慢。有没有更好的查询来运行这种操作,或者有没有更好的方法来解决这个问题?任何提示或指示?

mysql performance join select query-performance

5
推荐指数
1
解决办法
2340
查看次数