我对这一切都很陌生,所以要温柔:)。
我有大型医疗数据库,我需要根据选定的医生为患者提取数据。
现在我建立了一个病人名单
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 名患者列表,上述查询需要很长时间。
关于更好的方法的任何建议?
我有3张桌子
只查询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 中做到这一点?
SELECT TOP 50 PERCENT * FROM table
Run Code Online (Sandbox Code Playgroud)
在不运行单独查询的情况下(如果可能),最简单的方法是什么?
我正在尝试选择数据库中已有的数据,并使用从表一生成的 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 函数来从配置组 …
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子句时会发生
在一个简单的查询中
SELECT *
FROM table
WHERE id='x' OR id='y'
Run Code Online (Sandbox Code Playgroud)
如何优先获得仅其中一个WHERE条款?
我的意思是用id='x'. 仅当没有行时,获取行id='y'。
换句话说,id='y'如果有一行则不要使用id='x'。
想象一下在 Redis 数据库中有一堆散列,每个散列代表一个用户对象。例如,您将如何让用户获得最低注册日期?位置ts_registered最低的用户。我在 redis.io的命令页面上搜索了一些,但似乎没有在那里找到它的命令。
我对Redis没有太多经验,我基本上只是在检查它是如何工作的。
我有两张表,一张继承了另一张:
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) 我有一个表 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 行,并且事情变得非常缓慢。有没有更好的查询来运行这种操作,或者有没有更好的方法来解决这个问题?任何提示或指示?
select ×10
mysql ×7
performance ×2
condition ×1
inheritance ×1
insert ×1
join ×1
mysql-5.5 ×1
postgresql ×1
query ×1
redis ×1
subquery ×1
transaction ×1