标签: relational-division

所有 SQL 查询都可以用关系代数、域和元组关系演算来表示吗

我的查询包括拥有和计数或全部。这些在 RA/DRC/TRC 中如何表示?我是否必须进一步简化我的 SQL 查询?这是一个简化的示例:

empl(employee (primary key), city)
managers(employee (primary key), manager (foreign key of employee))
Run Code Online (Sandbox Code Playgroud)

如果我要找到 X 市所有员工的经理(来自任何城市)的所有员工..我需要使用having/count。不知道在 RA/DRC/TRC 中这将如何完成。

我知道这样的查询的需要可能没有意义,但假设对于这个问题的目的来说这是合理的。

谢谢

sql database relational-algebra relational-database relational-division

2
推荐指数
1
解决办法
3954
查看次数

你能解决这个简单的SQL查询吗?

假设它是一个销售照相机的网站.这是我的实体(表格):

Camera: A simple camera
Feature: A feature like: 6mp, max resolution 1024x768, 
Run Code Online (Sandbox Code Playgroud)

事情是相机和功能之间我有多对多的关系,所以我有一个额外的表:

camera -> cameras_features -> feature
Run Code Online (Sandbox Code Playgroud)

所以,查询很简单:

如何获得具有1,2和3功能的所有相机?

这就像构建位图索引一样.

您可以用来测试解决方案是否正常的数据

C1 has features 1,2,3
C2 has features 1,2,4
C3 has features 1,2
Run Code Online (Sandbox Code Playgroud)

以下是查询和预期结果:

  • 显示所有具有功能1,2和3的摄像机: C1
  • 显示所有具有1,2和4功能的摄像机: C2
  • 显示所有具有功能1和2的摄像机: C1,C2C3

这是我做的(它的工作原理,但它真的很难看,不想使用它):

SELECT * FROM camera c

WHERE c.id IN (    
    (SELECT c.id FROM camera c JOIN cameras_features f ON (c.id=f.camera_id)
    WHERE f.feature_id=1)
        q1 JOIN -- simple intersect
    (SELECT c.id FROM camera c JOIN cameras_features …
Run Code Online (Sandbox Code Playgroud)

mysql sql relational-division sql-match-all

2
推荐指数
1
解决办法
239
查看次数

MSSQL选择"垂直" - 其中

除了"垂直在哪里",我真的不知道如何解释.

想象一下下表:

TAGID|PRODUCTID|SHOP_ID
59   |3418-7   |38
61   |3418-7   |38
60   |4227-4   |38
61   |4227-4   |38
Run Code Online (Sandbox Code Playgroud)

现在我想返回与标签ID有关的所有产品ID:59,61.换句话说,两个标签ID 存在行的产品ID的值.

所以我想返回3418-7,但不是4227-4

如何在SQL语句中尽可能简单地编写它?

这是我到目前为止的工作声明,但我觉得这可以用更聪明的方式完成:

SELECT 
  productid 
FROM shop_tag_relations 
WHERE 
  productid IN (select productid from shop_tag_relations WHERE tagid=59) 
AND 
  productid IN (select productid from shop_tag_relations WHERE tagid=61)
GROUP BY productid,shop_id
Run Code Online (Sandbox Code Playgroud)

sql-server select relational-division

2
推荐指数
1
解决办法
294
查看次数

SQL返回合并的结果集

我有以下SQL:

SELECT `table1`.`value`, `table2`.* 
FROM `table2` 
INNER JOIN `table1` ON `table2`.`product_id` = `table1`.`entity_id`
WHERE `table2`.`created_at` > '2012-04-23' and 
(`table1`.`value` = 264 OR `table1`.`value` = 260)
order by order_id
Run Code Online (Sandbox Code Playgroud)

返回一个这样的结果集(这只是返回结果的一部分):

value  order_id   ...
260    1234
260    1235
260    1236
264    1236
260    1237
260    1238
260    1239
264    1239
264    1240
260    1241
Run Code Online (Sandbox Code Playgroud)

我想要的是一个查询,它将获取这些结果,并且只返回order_id包含值260和264的订单.基于此示例,我要查找的最终结果是

260   1236
264   1236
260   1239
264   1239
Run Code Online (Sandbox Code Playgroud)

我的想法是这可以用一个子集完成,但我不完全确定完成它的细节.

mysql sql relational-division

2
推荐指数
1
解决办法
131
查看次数

SQL查询显示包含列表中所有值的分组行

SQL查询

TABLE - CUSTOMER
1001,1
1001,2
1001,3
1002,1
1002,3
1003,3

TABLE - PRODUCT
1
2
3
Run Code Online (Sandbox Code Playgroud)

结果应为1001因为它使所有值与订单表匹配.
PRODUCT表可能会随时间而变化.
我想找出谁从我这里买了所有产品.
谢谢!

sql list match relational-division

2
推荐指数
1
解决办法
1380
查看次数

如何解决这种关系除法查询?

我有一个movies带有两个外键(movie_id,genre_id)的table().当然,这两个领域都不是唯一的.

所以我的问题如下,我想选择一部有两种或两种以上特定类型的电影.所以我想做一些事情:

SELECT movie_id 
FROM movies
WHERE genre_id = 1 AND genre_id = 2 AND genre_id = 3
Run Code Online (Sandbox Code Playgroud)

关于如何做的任何想法?谢谢!

mysql sql relational-division

2
推荐指数
1
解决办法
251
查看次数

找到一对完全相同课程的学生

我必须找到一对学生,他们从拥有studentID和的表中选择完全相同的课程courseID.

studentID | courseID
    1           1
    1           2
    1           3
    2           1
    3           1
    3           2
    3           3 
Run Code Online (Sandbox Code Playgroud)

查询应该返回(1, 3).
结果也不应该有重复的行,例如(1,3)(3,1).

mysql sql postgresql aggregate-functions relational-division

2
推荐指数
1
解决办法
3492
查看次数

MySQL 关系划分

我在解决一项练习时遇到困难:

有一家餐厅,供应他们最喜欢的啤酒。

(是的,我们实际上在学校有这个:D)

我有 2 个可以使用的表:

  • 表 1:最喜欢的啤酒(名称、姓氏、啤酒名称)
  • 表 2:OnStock(啤酒名称、餐厅、数量)

我的解决方案是:OnStock % Favoritebeer

MySQL 中没有像 DIVISION 这样的东西。我有什么想法可以解决这个问题吗?我在维基百科上找到了以下内容:http : //en.wikipedia.org/wiki/Relational_algebra#Division_.28.C3.B7.29这正是我需要的,但我很难用 SQL 翻译它。

编辑:

这里的示例数据:http : //www.sqlfiddle.com/#!2/34e00

结果应该是:

Bucher Rolf
Mastroyanni Pepe
Meier Hans
Meier Hanspeter
Meier Hansruedi
Müller Heinrich
Peters Peter
Zarro Darween
Run Code Online (Sandbox Code Playgroud)

mysql relational-division

2
推荐指数
1
解决办法
3482
查看次数

SQL查询包含列表中所有项目的记录

我有以下表格:

电影

  MOVIE_ID 标题
---------- -----------------------------
         1 肖申克的救赎
         2 教父
         3 教父:第二部分
         4 黑暗骑士
         5 低俗小说
         6 善、恶、丑
         7 辛德勒的名单
         8 愤怒的人
         9 搏击俱乐部
        10 起始
        11 阿甘正传

董事

DIRECTOR_ID 名称
----------- -------------------------
          1 蒂姆·罗宾斯
          2 摩根·弗里曼
          3 马龙·白兰度
          4 阿尔·帕基诺
          5 罗伯特·德尼罗
          6 克里斯蒂安·贝尔
          7 希斯·莱杰
          8 约翰·特拉沃拉
          9 乌玛·瑟曼
         10 克林特·伊斯特伍德
         11 伊莱·瓦拉赫

直接的

  MOVIE_ID DIRECTOR_ID
---------- -----------
         1 1
         1 2
         2 3
         2 4
         3 4
         3 5
         4 6
         4 7
         5 8
         5 9 …

mysql sql sqlite oracle relational-division

2
推荐指数
1
解决办法
8724
查看次数

INNER JOIN 中的多个条件

我有两个表userproduct它们具有一对多关系(一个表user可能有多个product)。

\n\n

我想创建一个查询来获取所有user同时具有橙子和香蕉的 s。在我下面的例子中,这将是john并且leeroy

\n\n

我该如何制定查询来做到这一点?

\n\n

只有一个条件我会这样:

\n\n
SELECT * FROM "user" \nINNER JOIN "product" ON "product"."fk_user" = "user"."id"\nWHERE "product"."product" = \'banana\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

桌子user

\n\n
\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91 id \xe2\x95\x91 name    \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 1  \xe2\x95\x91 michael \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 2  \xe2\x95\x91 john    \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 3  \xe2\x95\x91 leeroy  \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 4  \xe2\x95\x91 tony    \xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\n
Run Code Online (Sandbox Code Playgroud)\n\n

桌子product

\n\n
\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91 product \xe2\x95\x91 fk_user \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 orange  \xe2\x95\x91 1       \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91 orange  \xe2\x95\x91 2 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql relational-division

2
推荐指数
1
解决办法
5124
查看次数