假设我有这样的结构:
RecipeID
Name
Description
Run Code Online (Sandbox Code Playgroud)
RecipeID
IngredientID
Quantity
UOM
Run Code Online (Sandbox Code Playgroud)
关键RecipeIngredients
是(RecipeID, IngredientID)
。
有哪些查找重复食谱的好方法?重复配方被定义为具有完全相同的一组成分和每种成分的数量。
我想过使用FOR XML PATH
将成分组合到一个列中。我还没有完全探索这个,但如果我确保成分/UOM/数量按相同的顺序排序并且有一个合适的分隔符,它应该可以工作。有更好的方法吗?
有 48K 食谱和 200K 成分行。
sql-server-2008 database-design sql-server relational-division
我有一个执行大量重复工作的查询:
SELECT visitor_id, '1'::text AS filter
FROM events
WHERE id IN (SELECT event_id FROM params
WHERE key = 'utm_campaign' AND value = 'campaign_one')
AND id IN (SELECT event_id FROM params
WHERE key = 'utm_source' AND value = 'facebook')
GROUP BY visitor_id
UNION ALL
SELECT visitor_id, '2'::text AS filter
FROM events
WHERE id IN (SELECT event_id FROM params
WHERE key = 'utm_campaign' AND value = 'campaign_two')
AND id IN (SELECT event_id FROM params
WHERE key = 'utm_source' AND value = 'facebook') …
Run Code Online (Sandbox Code Playgroud) 抱歉,如果之前已经问过这个问题。我找不到任何例子。
我试图将学生的课程作业拉出一个学期,前提是他们在所有课程中都获得了“NA”的成绩。现在,我的代码只吸引在任何课程中成绩为“NA”的学生。我需要他们在所有课程中都有“NA”,而不仅仅是 1 或 2 门课程。
我的数据:
姓名 | 课程 | 年级 |
---|---|---|
学生1 | en101 | 不适用 |
学生1 | 马101 | 乙 |
学生1 | py102 | 一种 |
学生2 | en101 | 不适用 |
学生2 | 马205 | 不适用 |
学生2 | en206 | 不适用 |
学生3 | 马101 | 不适用 |
我正在尝试为学生提取所有行,前提是他们在所有课程中的成绩都为“NA”。
结果应该是:
姓名 | 课程 | 年级 |
---|---|---|
学生2 | en101 | 不适用 |
学生2 | 马205 | 不适用 |
学生2 | en206 | 不适用 |
学生3 | 马101 | 不适用 |
即使其他行不满足条件,我的代码也会提取等级为“NA”的每一行。我需要为该记录拉出所有行,只有当它满足每一行的条件时。
在我看来似乎很容易……似乎无法让它发挥作用。谢谢
一个 Item 有许多 ItemDetails。ItemDetail 具有“type”、“value”和“item_id”字段。
当且仅当项目具有受某些可变条件限制的确切ItemDetails 时,我才需要找到所有项目。例如,我需要查找 ItemDetails 为 (type=10, value=1000) 和 (type=20 and value=2000) 的所有项目
我的第一个解决方案是这样的:
select p.*
from item p
where not exists
(
select c.id from item_detail c
where c.item_id=p.id
and (c.type<>10 or c.value<>1000)
and (c.type<>20 or c.value<>2000)
);
-- Execution Time: 17.819 ms
Run Code Online (Sandbox Code Playgroud)
但我意识到它只获取一个 ItemDetail(type=10, value=1000) 的项目。然后我发现了这个问题并改变了如下查询。
select p.*
from item p
where not exists
(
select c.id from item_detail c
where c.item_id=p.id
and (c.type<>10 or c.value<>1000)
and (c.type<>20 or c.value<>2000) …
Run Code Online (Sandbox Code Playgroud) 这些是我创建的表并相应地插入了值:
CREATE TABLE Customer
(Customer_No INTEGER IDENTITY (1,1) PRIMARY KEY,
Customer_Name VARCHAR(30) NOT NULL
)
CREATE TABLE DVD
(DVD_No INTEGER IDENTITY (1,1) PRIMARY KEY,
DVD_Name VARCHAR(30)
)
CREATE TABLE DVD_Purchase
(DVD_Purchase_No INTEGER IDENTITY (1,1) PRIMARY KEY,
DVD_No INTEGER NOT NULL,
Customer_No INTEGER NOT NULL
)
INSERT INTO Customer (Customer_Name)
VALUES('Daman')
INSERT INTO Customer (Customer_Name)
VALUES('Saif')
INSERT INTO Customer (Customer_Name)
VALUES('Gurung')
INSERT INTO Customer (Customer_Name)
VALUES('Upendra')
INSERT INTO DVD (DVD_Name)
VALUES('Bleach')
INSERT INTO DVD (DVD_Name)
VALUES('Gintama')
INSERT INTO DVD (DVD_Name)
VALUES('Tokyo …
Run Code Online (Sandbox Code Playgroud) 我的数据库(Postgresql 10)具有以下架构:
CREATE TABLE "PulledTexts" (
"Id" serial PRIMARY KEY,
"BaseText" TEXT,
"CleanText" TEXT
);
CREATE TABLE "UniqueWords" (
"Id" serial PRIMARY KEY,
"WordText" TEXT
);
CREATE TABLE "WordTexts" (
"Id" serial PRIMARY KEY,
"TextIdId" INTEGER REFERENCES "PulledTexts",
"WordIdId" INTEGER REFERENCES "UniqueWords"
);
CREATE INDEX "IX_WordTexts_TextIdId" ON "WordTexts" ("TextIdId");
CREATE INDEX "IX_WordTexts_WordIdId" ON "WordTexts" ("WordIdId");
Run Code Online (Sandbox Code Playgroud)
一些示例数据:
INSERT INTO public."PulledTexts" ("Id", "BaseText", "CleanText") VALUES
(1, 'automate business audit', null),
(2, 'audit trial', null),
(3, 'trial', null),
(4, 'audit', null),
(5, 'fresh …
Run Code Online (Sandbox Code Playgroud) postgresql performance subquery relational-division postgresql-performance
鉴于此数据:
gid | val
1 | a
1 | a
1 | a
2 | b
3 | x
3 | y
3 | z
Run Code Online (Sandbox Code Playgroud)
以下查询返回包含一个不同值 (val) 的组 (gid):
SELECT gid FROM t GROUP BY gid HAVING MIN(val) = MAX(val)
SELECT gid FROM t GROUP BY gid HAVING COUNT(DISTINCT val) = 1
Run Code Online (Sandbox Code Playgroud)
人们似乎认为第一个变体会更快(如果假设存在适当的索引,那么查找 MIN 和 MAX 将比计算所有值更快)。这是事实还是神话。
performance sql-server relational-division query-performance
想象一下三个表的设置,User、Group 和 UserGroup,其中 UserGroup 由指向每个 User 和 Group 表的简单外键组成。
User
----
id
name
Group
-----
id
name
UserGroup
---------
user_id
group_id
Run Code Online (Sandbox Code Playgroud)
现在,我想编写一个查询,选择所有指定组中的所有用户。例如,从用户是“group1”、“group2”和“group3”中的每一个的一部分的用户中选择*。
使用 Django ORM 查询,我会做类似的事情
users = (
User.objects
.filter(user_group__group_id=group1.id)
.filter(user_group__group_id=group2.id)
.filter(user_group__group_id=group2.id)
)
Run Code Online (Sandbox Code Playgroud)
这将为每次调用产生一个连接.filter
,例如
SELECT * FROM users
INNER JOIN user_group g1 ON g1.user_id = id
INNER JOIN user_group g2 ON g2.user_id = id
INNER JOIN user_group g3 ON g3.user_id = id
WHERE g1.group_id = %s
AND g2.group_id = %s
AND g3.group_id = %s
Run Code Online (Sandbox Code Playgroud)
如果我要查询一个更大的集合来匹配,这会变得有点麻烦。
那么有什么更好的方法来做到这一点呢?如果我要问“任何”而不是“所有”,如果是一个简单的问题
SELECT …
Run Code Online (Sandbox Code Playgroud) 我有两个表,外键来自 T1->T2,处于一对多关系。也就是说,表 T1 中的 1 个元组与 T2 中的 0..N 个元组相关联。
为了创建一个简单的例子,假设 T1 是汽车,而 T2 是一个缺陷表。因此,一辆汽车可以有 0..N 个缺陷,我们将这些缺陷作为整数存储在 T2 中。
我想仅从包含缺陷 i1和i2 的汽车中的那些汽车中选择 * 。
相反,执行 OR 非常简单:
SELECT * FROM cars AS T1
WHERE EXISTS (
SELECT imperfection FROM Imperfections as T2
WHERE T1.uid = T2.uid AND (imperfection = 1 OR imperfection = 2)
);
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用交集设置逻辑,但在这一点上,我想知道我是否过于复杂了。
如果有人可以帮助我进行下面的查询,那就太好了!这个查询很有挑战性,我尝试自己做,但无法显示正确的结果......
我使用类似于“Facebook”的系统的数据库。
查询应显示去年为每个帖子发表评论的用户的电子邮件和姓名,这些帖子由他们的每个朋友发布。
意思是,我只想显示对所有朋友的所有帖子发表评论的人。
这是我的试验,但我收到了部分结果。我无法理解我做错了什么。
select distinct U.Mail, U.FirstName + ' ' + U.LastName as FullName
from Users U
inner join FriendsList FL on U.Mail = FL.Mail1
inner join Post P on FL.Mail2 = P.UserMail
left outer join Comment C on P.ID = C.IDPost and P.UserMail <> C.Mail
where datediff(year, P.DatePosted, getdate()) <= 1
group by U.Mail, U.FirstName, U.LastName
having count(distinct P.ID) = count(distinct C.IDPost)
Run Code Online (Sandbox Code Playgroud)
BAK文件链接(包括测试数据):https : //file.io/SagvM3cx
例子:
让我们假设 I & Adam & Ben 是朋友。
?? 第一种情况: …