这可能是一个幼稚的问题,但这两个查询有什么区别,哪个是首选?
UPDATE table1,
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) AS B
SET table1.Freq = B.idcount WHERE table1.id=B.id
Run Code Online (Sandbox Code Playgroud)
和
UPDATE table1 A INNER JOIN
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) B USING (id)
SET A.Freq = B.idcount
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算从子查询中检索的列数,并且某些子查询可能为空。因此,我不想将其显示为空单元格,而是希望它为 0。发现我可以通过使用该COALESCE函数来做到这一点,但例如此查询仍然给我一个空单元格:
CREATE VIEW third_table AS
SELECT *
FROM (second_table
NATURAL FULL JOIN (
SELECT assignment_id, COALESCE( count(*), 0 ) AS num_60_79
FROM (
SELECT assignment_id, mark_as_percent
FROM avg_required_table
WHERE mark_as_percent >= 60
AND mark_as_percent < 80
) a
GROUP BY assignment_id
) b);
Run Code Online (Sandbox Code Playgroud)
这是COALESCE应该如何使用?
我有一个表,其中的 NVARCHAR 列包含无法转换为 BIGINT 的数据。我很清楚这一点,并已使用 过滤掉它ISNUMERIC(BB.NVARCHARCOL) = 1。尽管如此,在尝试查询数据时我仍然收到错误,说明Error converting data type nvarchar to bigint.
以下工作正常(SQL 没有报告错误):
SELECT *
FROM myNormalTable AA INNER JOIN myBadTable BB ON BB.NVARCHARCOL = AA.MYBIGINTCOL
WHERE ISNUMERIC(BB.NVARCHARCOL) = 1
Run Code Online (Sandbox Code Playgroud)
以下抛出错误:
SELECT *
FROM (
SELECT *
FROM myNormalTable AA INNER JOIN myBadTable BB ON BB.NVARCHARCOL = AA.MYBIGINTCOL
WHERE ISNUMERIC(BB.NVARCHARCOL) = 1
) ZZ
WHERE ZZ.MYBIGINTCOL = 1234
Run Code Online (Sandbox Code Playgroud)
这种变化也会引发错误:
SELECT *
FROM (
SELECT *
FROM myNormalTable AA INNER JOIN
(SELECT CAST(NVARCHARCOL AS BIGINT) …Run Code Online (Sandbox Code Playgroud) 架构:
CREATE TABLE "applications" (
"id" SERIAL NOT NULL PRIMARY KEY,
"country" VARCHAR(2) NOT NULL,
"created" TIMESTAMP WITH TIME ZONE NOT NULL,
"is_preliminary" BOOLEAN NOT NULL,
"first_name" VARCHAR(128) NOT NULL,
"last_name" VARCHAR(128) NOT NULL,
"birth_number" VARCHAR(11) NULL
);
CREATE TABLE "persons" (
"id" UUID NOT NULL PRIMARY KEY,
"created" TIMESTAMP WITH TIME ZONE NOT NULL,
"modified" TIMESTAMP WITH TIME ZONE NOT NULL
);
ALTER TABLE "applications" ADD COLUMN "physical_person_id" UUID NULL;
CREATE INDEX "physical_person_id_idx" ON "applications" ("physical_person_id");
ALTER TABLE …Run Code Online (Sandbox Code Playgroud) 我有 4 张桌子(实际上我还有很多想要做的事情......但这就是我开始的地方)。
distr_catalogs: 有很多distr_catalog_brands,distr_catalog_system_typesdistr_catalog_brands: 属于distr_catalogsdistr_catalog_system_types: 属于distr_catalogsbrand_catalog_sections: 属于distr_catalog_brands,distr_catalog_system_types我想创建一个物化视图,其列是:
catalog_id | catalog_name | brand_ids | system_type_ids | catalog_sections
Run Code Online (Sandbox Code Playgroud)
catalog_id&catalog_name从桌子上distr_catalog来brand_ids包含与目录相关的品牌 ID 数组system_type_ids保存与目录相关的系统类型 ID 的数组catalog_sectionsbrand_ids包含与和相关的品牌目录部分 ID 的数组system_type_ids除了最后一个之外,我可以做所有的事情:
CREATE MATERIALIZED VIEW catalog_system_brands AS
select dc.id as catalog_id, dc.catalog_name,
ARRAY(SELECT brand_id FROM distr_catalog_brands WHERE distr_catalog_id = dc.id) as brands,
ARRAY(SELECT id FROM distr_catalog_system_types WHERE display_status …Run Code Online (Sandbox Code Playgroud) 我有一个包含列ID, TYPE, DATE, ... 的表,我需要所有数据集TYPE <> 'A'(案例 1),TYPE = A如果没有TYPE = B相同的数据集ID(案例 2)。第一种情况很容易,所以我想UNION用来结合第一种和第二种情况。但我不知道如何选择第二种情况。我正在尝试自我连接,例如:
SELECT *
FROM MY_TABLE TAB1
JOIN MY_TABLE TAB2
ON
TAB1.ID = TAB2.ID
AND TAB1.TYPE = 'A'
AND TAB2.TYPE = 'B'
Run Code Online (Sandbox Code Playgroud)
这样我就得到了我不想要的集合。我想我需要一个子查询,但我不知道我应该朝哪个方向工作。
也许是这样的:
SELECT *
FROM MY_TABLE TAB1
WHERE TAB1.TYPE <>'A'
UNION
SELECT *
FROM MY_TABLE TAB1
NOT IN
(SELECT *
FROM MY_TABLE TAB1
JOIN MY_TABLE TAB2
ON
TAB1.ID = TAB2.ID
AND TAB1.TYPE = …Run Code Online (Sandbox Code Playgroud) 我无法解决这个问题,如何让子查询为每个讲师返回最低的课程权重,它目前只返回最低的,我的子查询是错误的还是外部查询?
问题:显示每位讲师的最低课程作业权重,显示员工 ID、模块 ID 和所选的权重。
SELECT m1.ModuleID, m1.CWWeight, l.StaffID
FROM dbo.module as m1
INNER JOIN dbo.Lecturer as l
ON m1.ModuleConvenor = l.StaffID
WHERE m1.CWWeight = (SELECT MIN(m2.CWWeight)
FROM dbo.Module as m2)
Run Code Online (Sandbox Code Playgroud) 由于 MySql 不支持子查询中的主别名引用,因此创建具有多行的查询有点困难,您必须限制左连接表的行。
让我们概述一下简单的例子。
假设有两个表:
CREATE TABLE `items` (
`id` INT NOT NULL AUTO_INCREMENT,
`parent` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
PRIMARY KEY (`id`));
CREATE TABLE `sub_items` (
`id` INT NOT NULL AUTO_INCREMENT,
`child` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL,
`parent_id` INT NOT NULL,
PRIMARY KEY (`id`));
Run Code Online (Sandbox Code Playgroud)
内容如下:
INSERT INTO `items` (`parent`) VALUES ('Main item1');
INSERT INTO `items` (`parent`) VALUES ('Main item2');
INSERT INTO `items` (`parent`) VALUES ('Main item3');
INSERT INTO `sub_items` (`child`, `parent_id`) VALUES ('Child …Run Code Online (Sandbox Code Playgroud) 我正在与老板交谈,他更喜欢子查询而不是 CTE。就个人而言,我讨厌子查询。他提到子查询可以更快,但我不相信。我运行了这个简短的测试:
with classes as
(select top 10 Classkey from dimclass
group by classkey
order by count(1) desc),
policies as (
select CarrierKey, policykey, periodeffectivedate from dimpolicy),
exposure as (
select policykey, classkey from DimExposure)
select * from policies p
inner join exposure x on p.PolicyKey = x.PolicyKey
inner join classes c on x.ClassKey = c.Classkey
Run Code Online (Sandbox Code Playgroud)
有一个执行计划:
https://www.brentozar.com/pastetheplan/?id=SJYJUZNHS
select p.CarrierKey, p.PolicyKey, p.periodeffectivedate from dimpolicy p
inner join (select policykey, classkey from DimExposure) x on p.PolicyKey = x.PolicyKey
inner join (select …Run Code Online (Sandbox Code Playgroud) 我有两张桌子,一张是Category,另一张是Product。
表说明有
类别
产品
category_id(类别表的外键)
我想在单个产品上显示所有类别以及相关产品。因此,为了获取关联的类别,我使用以下查询。我可以在自引用表中进行左连接,但无法获取产品数据列表,因为这是一个子查询,而子查询只会返回单个列。
select
cat1.id, ARRAY(select name, type, description from product where
product.category_id = cat1.id)
as category_1_products_data,
cat2.id, ARRAY(select name, type, description from product where
product.category_id = cat2.id)
as category_2_products_data,
cat3.id, ARRAY(select name, type, description from product where
product.category_id = cat3.id)
as category_3_products_data
from category cat1
left join category cat2
on cat2.parent_id = cat1.id
left join category cat3
on cat3.parent_id = cat2.id
where cat1.parent_id is …Run Code Online (Sandbox Code Playgroud)subquery ×10
join ×4
postgresql ×4
sql-server ×3
mysql ×2
performance ×2
cast ×1
coalesce ×1
cte ×1
db2 ×1
limits ×1
mysql-5.6 ×1
select ×1
update ×1