标签: relational-division

MySQL选择ID,它出现在具有列的多个特定值的不同行上

我正在尝试从关联表中选择满足两个或更多相同字段值的项目,听起来令人困惑,让我解释一下.

+-----------------------+
| item_id | category_id |
+-----------------------+
|   1     |    200      |
|   1     |    201      |
|   1     |    202      |
|   2     |    201      |
|   2     |    202      |
|   3     |    202      |
|   3     |    203      |
|   4     |    201      |
|   4     |    207      |
+-----------------------+
Run Code Online (Sandbox Code Playgroud)

在表格中,我希望只能选择我通过的类别中的项目.因此,例如,如果我传递201和202的类别ID,我只想要两个类别的项目(它们可以有其他类别,但至少需要在我查询的类别中),所以在这种情况下,我只想要第1项和第2项,因为它们是201和202类别中唯一的项目.

我最初的SQL语句是这样的

SELECT * FROM item_category WHERE category_id = 201 AND category_id = 202;
Run Code Online (Sandbox Code Playgroud)

但显然这不起作用.

SELECT * FROM item_category WHERE category_id = 201 OR category_id = …
Run Code Online (Sandbox Code Playgroud)

mysql relational-division

9
推荐指数
1
解决办法
3638
查看次数

jsonb查询与数组中的嵌套对象

我正在使用PostgreSQL 9.4,其中teams包含一个jsonb名为的列的表json.我正在寻找一个查询,我可以让所有拥有球员的球队3,4以及7他们的球员阵容.

该表包含两行,包含以下json数据:

第一排:

{
    "id": 1,
    "name": "foobar",
    "members": {
        "coach": {
            "id": 1,
            "name": "A dude"
        },
        "players": [
            {
                "id": 2,
                "name": "B dude"
            },
            {
                "id": 3,
                "name": "C dude"
            },
            {
                "id": 4,
                "name": "D dude"
            },
            {
                "id": 6,
                "name": "F dude"
            },
            {
                "id": 7,
                "name": "G dude"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

第二排:

{
    "id": 2,
    "name": "bazbar",
    "members": …
Run Code Online (Sandbox Code Playgroud)

sql postgresql relational-division jsonb postgresql-9.4

9
推荐指数
1
解决办法
4092
查看次数

检查列是否包含另一列的所有值 - Mysql

假设我有一个带有人员ID和其他东西ID的表T1,如下所示

Table: T1
personID | stuffID 
    1    |    1
    1    |    2
    1    |    3
    1    |    4
    2    |    1
    2    |    4
    3    |    1
    3    |    2
Run Code Online (Sandbox Code Playgroud)

另一个表T2只有一列stuffID

Table: T2
stuffID
   1  
   2  
   3  
Run Code Online (Sandbox Code Playgroud)

我得到的结果是,一个SELECT与所有T2的所有stuffID连接的peopleID表.

在该示例之后,结果将仅是id 1(即使所关联的所有stuffID都包含在T2.stuffID中,personID 3也不会出现).

mysql sql relational-division

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

MySQL通过另一个表找到行

我有两张桌子:

游戏

`id`        INT(11)
Run Code Online (Sandbox Code Playgroud)

game_tags

`game`      INT(11)
`tag_id`    INT(11)
Run Code Online (Sandbox Code Playgroud)

game_tags.game = game.id

我对MySQL很恐怖,所以这是我的问题:我希望能够找到games具有一定数量的MySQL tag_id.所以,如果我有四个tag_id(3,5,7,11),我希望能够通过查看game_tags表格找到哪些游戏将拥有所有这四个标签.这是我的意思的一个例子:

伪MySQL的:

SELECT *
FROM `games`
WHERE (search through game_tags table and find which rows have the same `game` field and all of the tag_id's that I need to search for)
LIMIT 0, 15
Run Code Online (Sandbox Code Playgroud)

我知道我解释了这个可怕的(不能在我的脑海里说出来),所以如果你有任何问题,请发表评论.

php mysql sql relational-division

6
推荐指数
1
解决办法
169
查看次数

在具有特定基数的映射(联结)表之间加入

关于执行特定连接的最有效方法,我有一个简单的问题.

拿这三张桌子,改名实名来保护无辜者:

表:动物

animal_id   name   ...
======================
1           bunny
2           bear
3           cat
4           mouse

表:标签

tag_id     tag
==================
1          fluffy
2          brown
3          cute
4          small

映射表:animal_tag

animal_id   tag_id
==================
1           1
1           2
1           3
2           2
3           4
4           2

我想找到所有被标记为" 蓬松 "," 棕色 "和" 可爱 "的动物.也就是说,必须用这三种动物标记动物.实际上,所需标签的数量可能会有所不同,但与此讨论无关.这是我提出的查询:

SELECT * FROM animal
JOIN (
      SELECT at.animal_id FROM animal_tag at
      WHERE at.tag_id IN (
                          SELECT tg.tag_id FROM tag tg
                          WHERE tg.tag='fluffy' OR tg.tag='brown' OR tg.tag='cute'
                          )
      GROUP …
Run Code Online (Sandbox Code Playgroud)

sql mapping join relational-division

6
推荐指数
1
解决办法
2118
查看次数

如何查找与其他记录组匹配的记录组(关系分区?)

为了设置合并帐户处理,我想找出具有"完全相同"的所有者集的帐户.

我认为用动态sql转动所有者可能会有用,然后使用排名功能,但我不想采用这种方法; 我没有关于可以与给定帐户关联的名称数量的上限,因此我想避免使用动态SQL.

我的数据(也在http://www.sqlfiddle.com/#!3/1d36e)

 CREATE TABLE allacctRels
 (account INT NOT NULL,
 module CHAR(3) NOT NULL,
 custCode CHAR(20) NOT NULL)


 INSERT INTO allacctrels
 (account, module, custCode)
 VALUES
 (1, 'DDA', 'Wilkie, Walker'),
 (1, 'DDA', 'Houzemeal, Juvy'),
 (2, 'CDS', 'Chase, Billy'),
 (2, 'CDS', 'Norman, Storm'),
 (3, 'CDS', 'Chase, Billy'),
 (3, 'CDS', 'Norman, Storm'),
 (7, 'CDS', 'Perkins, Tony'),
 (15, 'SVG', 'Wilkie, Walker'), --typo in name before mwigdahl's response
 (16, 'SVG', 'Wilkie, Walker'), -- corrected typo here too
 (606, 'DDA', 'Norman, Storm'),
 (606, …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008 relational-division

6
推荐指数
1
解决办法
1085
查看次数

使用NOT EXISTS获得所有贷款的借款人

我想找到所有贷款类型的借款人.

架构:

loan (number (PKEY), type, min_rating)
borrower (cust (PKEY), no (PKEY))
Run Code Online (Sandbox Code Playgroud)

样本表:

number | type     | min_rating
------------------------------
L1     | student  | 500
L2     | car      | 550
L3     | house    | 500
L4     | car      | 700
L5     | car      | 900

cust  | no 
-----------
Jim   | L2
Tom   | L1
Tom   | L2
Tom   | L3
Tom   | L4
Tom   | L5
Bob   | L3
Run Code Online (Sandbox Code Playgroud)

这里的答案是"汤姆".

我可以简单地计算贷款总数,并将借款人的贷款数量与之比较,但我不允许(这是一项家庭作业),为了这个家庭作业和学习的目的.

我想使用双重否定,我首先找到没有获得所有贷款的借款人,并找到那些不在那里的借款人.我想NOT EXISTS在我第一次找到没有拿到所有贷款的借款人的地方使用嵌套,但是我无法为此创建一个有效的查询.

sql sqlite relational-division

6
推荐指数
1
解决办法
649
查看次数

返回在列中具有相同确切项的不同名称对

我想在表中找到不同的名称对,它们在items列中具有相同的确切项.例如:

CREATE TABLE t
(
    name    VARCHAR(255),
    item    VARCHAR(255)
);

INSERT INTO t VALUES("Alice", "Orange");
INSERT INTO t VALUES("Alice", "Pear");
INSERT INTO t VALUES("Alice", "Lemon");
INSERT INTO t VALUES("Bob", "Orange");
INSERT INTO t VALUES("Bob", "Pear");
INSERT INTO t VALUES("Bob", "Lemon");
INSERT INTO t VALUES("Charlie", "Pear");
INSERT INTO t VALUES("Charlie", "Lemon");
Run Code Online (Sandbox Code Playgroud)

这里的答案是Alice,Bob因为他们采用完全相同的项目.

我想用双重否定(使用NOT EXISTS/NOT IN)来做这件事我认为更适合这个问题,但我无法想出任何远离功能的东西.

这有点类似于这个问题,但我使用SQLite,所以我不能使用GROUP_CONCAT(),但我想知道如何使用NOT EXISTS/NOT IN使用关系除法.

sqlite relational-division

6
推荐指数
1
解决办法
464
查看次数

什么是用于选择项/属性列表中具有多个属性的项的SQL语句?

假设我有一个列出项目和属性的表格,

frog    green
cat     furry
frog    nice
cat     4 legs
frog    4 legs
Run Code Online (Sandbox Code Playgroud)

从items列我想选择具有绿色和4个腿属性的唯一对象.在这种情况下,我希望能够回到青蛙对象.执行此操作的最有效查询是什么?

sql relational-division sql-match-all

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

寻求扩展的除法运算符解释

我正在阅读Itzik Ben-Gan,Lubor Kollar,Dejan Sarka和Steve Kass撰写的有关Codd 在Microsoft SQL Server 2008内部的八个原始运算符:T-SQL查询的内容,并且不了解Divide运算符。

引号定义了Divide运算符:

除数关系用于划分股息关系并产生商关系。商关系由除数表中一列的值组成,第二列包含除数中的所有值。”

该声明与Wikipedia的定义和示例一致

“为除法运算的计算公式包括三个关系:一个 除以bÇ,其中一个是被除数,b是除数,并且Ç是介体关系。让关系a具有属性A,关系b具有 属性B。除法运算符返回一个关系,该关系包括除数的所有元组,这样对于除数关系的所有元组,元组{A,B}出现在介体关系中。”

下图用于演示此语句。我相信这些关系按以下顺序表示:分红,除数,调解器和最终结果。

在此处输入图片说明

第二个关系(除数)具有用于元组的{a,x},{a,z},{b,x}和{b,z}。我的思考过程如下:由于存在元组{b,x}和{b,z},因此应在最终结果中包括b。我已经在该书的网站上检查了该书的更正(在本文开头链接),并且确定我错了。

为什么图示例a而不是ab的结果

relational-algebra divide relational-division

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