标签: join

JOIN 语句的输出是什么样的?

一段时间以来,我一直想使用连接,但是我无法将输出可视化,因此我知道如何使用它。

假设我有 2 张桌子:

CREATE TABLE Cities (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    city tinyblob
);

CREATE TABLE Users (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username TINYBLOB,
    city INT UNSIGNED,
    FOREIGN KEY (city) REFERENCES Cities (id)
);
Run Code Online (Sandbox Code Playgroud)

如果我的应用程序要运行 SQL 查询来获取用户的个人资料数据,我将如何使用连接来获取与用户记录关联的城市,以及输出的记录将如何显示?

mysql join foreign-key

8
推荐指数
2
解决办法
340
查看次数

关系是否比大而低效的表慢?

我在工作中被要求多次违反第一范式(跨列重复组,使用空/空值),“为了计算机处理能力”。简而言之,一个“学生”表应该至少有 8 个空字段(例如电话:telephone1、telephone2、telephone3...)而不是我的建议 - 一个包含电话号码(和可能的其他元数据)的“电话”表外键是学生证号。我的老板说最好以这种方式存储它们,因为“CPU 周期更少,这在 Web 平台中很重要”,而不是使用关系。我说,在最坏的情况下,它可以忽略不计。

在那个例子中,使用关系(假设在一个中等规模的 web 应用程序中用大量记录填充表)明显比使用那种表模式慢?

mysql rdbms join database-recommendation

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

SQL ANSI JOIN 优先级

我有一个看起来像这样的查询:

    SELECT *
      FROM TBLA A
 LEFT JOIN TBLB B ON A.Col1 = B.Col2
RIGHT JOIN TBLC C ON B.Col3 = C.Col4
      JOIN TBLD D ON C.Col5 = D.Col6
Run Code Online (Sandbox Code Playgroud)

将按照什么顺序解析连接?我对 SQL Server 最感兴趣,并将对它的解释标记为答案,但我对 ANSI/ISO 标准及其在各种 RDBMS 中的工作方式同样感兴趣。

这个问题的原因是为了弄清楚为什么结果与这个查询不同

    SELECT *
      FROM TBLA A
CROSS JOIN TBLC C
 LEFT JOIN TBLB B ON A.Col1 = B.Col2 AND B.Col3 = C.Col4
      JOIN TBLD D ON C.Col5 = D.Col6
Run Code Online (Sandbox Code Playgroud)

mysql postgresql oracle join sql-server

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

加入不同类型

在数据库中,我有两个表:

  1. 首先有一个名为场taxonomy_id是一个integer
  2. 后者有一个名为场ID是一个character varying

这两个表是相关的:如果它在第一个表中存在一行,那么taxonomy_id = N它就会在第二个表中存在一行ID = N.toString

现在,我想在这两个表之间进行连接;由于类型不匹配,“正常”连接自然不起作用。

你能帮我解决这个问题吗?

我正在使用PostgreSQL.

postgresql join datatypes

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

计算具有内部连接表的行

我有3张桌子:

球员:

    mysql> SELECT * FROM players;
+-----------+---------+----------------------+----------------------+-----------------+------------------------------+-----------------------+---------------------+
| player_id | team_id | player_name          | player_jersey_number | player_position | player_email                 | player_contact_number | player_timestamp    |
+-----------+---------+----------------------+----------------------+-----------------+------------------------------+-----------------------+---------------------+
|         1 |       4 | Popoy Alfonso        |                    2 |                 | popoyalfonso@gmail.com       | 09263453234           | 2015-08-05 00:48:10 |
|         2 |       4 | Karlo Ripas          |                   10 |                 | karloripas@yahoo.com         | 09212354324           | 2015-08-05 00:50:03 |
|         3 |       4 | VHaughn Von          |                   32 |                 | von@outlook.com              | 09361234565           | 2015-08-05 00:51:00 | …
Run Code Online (Sandbox Code Playgroud)

mysql join

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

生成差异的最有效方法

我在 SQL Server 中有一个表,如下所示:

Id    |Version  |Name    |date    |fieldA   |fieldB ..|fieldZ
1     |1        |Foo     |20120101|23       |       ..|25334123
2     |2        |Foo     |20120101|23       |NULL   ..|NULL
3     |2        |Bar     |20120303|24       |123......|NULL
4     |2        |Bee     |20120303|34       |-34......|NULL
Run Code Online (Sandbox Code Playgroud)

我正在研究一个存储过程来区分,它需要输入数据和版本号。输入数据包含从 Name up 到 fieldZ 的列。大多数字段列预计为NULL,即每行通常只有前几个字段的数据,其余为NULL。名称、日期和版本构成了表上的唯一约束。

对于给定的版本,我需要对输入的与该表相关的数据进行比较。每一行都需要区分——一行由名称、日期和版本标识,字段列中任何值的任何更改都需要显示在差异中。

更新:所有字段都不需要是十进制类型。其中一些可能是 nvarchars。我更希望 diff 发生而不转换类型,尽管 diff 输出可以将所有内容转换为 nvarchar,因为它仅用于显示目的。

假设输入如下,请求的版本为2,:

Name    |date    |fieldA   |fieldB|..|fieldZ
Foo     |20120101|25       |NULL  |.. |NULL
Foo     |20120102|26       |27    |.. |NULL
Bar     |20120303|24       |126   |.. |NULL
Baz     |20120101|15       |NULL  |.. |NULL
Run Code Online (Sandbox Code Playgroud)

差异需要采用以下格式:

name    |date    |field    |oldValue    |newValue
Foo     |20120101|FieldA …
Run Code Online (Sandbox Code Playgroud)

join sql-server union cross-apply

8
推荐指数
2
解决办法
224
查看次数

连接具有一对多关系的两个表的有效方法

这是面试时问我的面试问题,我无法回答。请帮忙..

连接两个表之间具有一对多关系的最有效方法是什么

join interview-question

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

SQL 查询仅显示单个食品的最近购买记录

我正在使用 MS Access 2013 中的食品采购/发票系统,并尝试创建一个 SQL 查询,该查询将返回每个单独食品的最新购买价格。

这是我正在使用的表的图表: MS Access 数据库中的表

我对 SQL 的理解是非常基本的,我尝试了以下(不正确的)查询,希望它只返回每个项目的一条记录(因为DISTINCT运算符)并且它只会返回最近购买的(因为我做了ORDER BY [Invoice Date] DESC)

SELECT DISTINCT ([Food items].Item), 
    [Food items].Item, [Food purchase data].[Price per unit], [Food purchase data].[Purchase unit], Invoices.[Invoice Date]
FROM Invoices
INNER JOIN ([Food items] 
    INNER JOIN [Food purchase data] 
    ON [Food items].ID = [Food purchase data].[Food item ID]) 
ON Invoices.ID = [Food purchase data].[Invoice ID]
ORDER BY Invoices.[Invoice Date] DESC;
Run Code Online (Sandbox Code Playgroud)

然而,上面的查询只是返回所有的食品购买(即 中每个记录的多条记录[Food items]),结果按日期降序排序。有人可以向我解释我对DISTINCT运营商的误解吗?也就是说,为什么它不只为 中的每个项目返回一条记录[Food items]

更重要的是 …

join ms-access sorting date distinct

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

删除具有两个或多个左连接表的重复行

像这样的查询

SELECT a.id, a.name,
       COALESCE( json_agg(b.*), '[]'::json ),
       COALESCE( json_agg(c.*), '[]'::json ),
  FROM a
  LEFT JOIN b ON a.id = b.a_id
  LEFT JOIN c ON a.id = c.a_id
 GROUP BY a.id, a.name;
Run Code Online (Sandbox Code Playgroud)

执行时,cb将彼此相乘并在 JSON 数组对象中产生重复的条目。

我尝试将查询更改为使用 2 个子查询,但出现各种错误和警告,例如“子查询必须只返回一列”等。

我也尝试使用LEFT OUTER JOIN,但我想我还没有掌握连接表的工作原理,因为它仅适用于b并且c仍然相乘并包含重复项。

编辑DISTINCTCOALESCE函数上使用带有“无法识别 json 类型的相等运算符”的错误。

如何修复此查询并仅聚合唯一行?


编辑 2

我需要指定表bc实际上都是VIEWs,而且它们都至少有一json_agg列,所以我不能只使用json_agg(DISTINCT b.*). 这太容易了。


编辑 3

这是一个重现问题的小片段:

--DROP TABLE …
Run Code Online (Sandbox Code Playgroud)

postgresql join postgresql-9.4

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

oracle如何从两个表中获取分层数据?

我有两个表 table1 和 table2,我需要通过连接两个表来进行分层输出。

表 1 包含三个类别 CAT1、CAT2 和 CAT3,其中一个外键即 F_ID,它是另一个表 table2 的主键,其中包含一个多列 ieVAL。

TABLE 1
-----------------
CAT1        CAT2        CAT3        F_ID
A           a           aa          1
A           a           ab          2
A           b           ba          3
A           b           bb          4
B           c           ca          5
B           c           cb          6
B           d           da          7


TABLE 2
-------------------
F_ID    VAL
1       4
2       6
3       4
4       1
5       6
6       6
7       9
Run Code Online (Sandbox Code Playgroud)

现在我需要以下格式的数据,其中每个类别和子类别都包含 VAL 的总和。

Need Data in below Format from the above table …
Run Code Online (Sandbox Code Playgroud)

oracle join oracle-11g

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