一段时间以来,我一直想使用连接,但是我无法将输出可视化,因此我知道如何使用它。
假设我有 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 查询来获取用户的个人资料数据,我将如何使用连接来获取与用户记录关联的城市,以及输出的记录将如何显示?
我在工作中被要求多次违反第一范式(跨列重复组,使用空/空值),“为了计算机处理能力”。简而言之,一个“学生”表应该至少有 8 个空字段(例如电话:telephone1、telephone2、telephone3...)而不是我的建议 - 一个包含电话号码(和可能的其他元数据)的“电话”表外键是学生证号。我的老板说最好以这种方式存储它们,因为“CPU 周期更少,这在 Web 平台中很重要”,而不是使用关系。我说,在最坏的情况下,它可以忽略不计。
在那个例子中,使用关系(假设在一个中等规模的 web 应用程序中用大量记录填充表)明显比使用那种表模式慢?
我有一个看起来像这样的查询:
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) 在数据库中,我有两个表:
taxonomy_id是一个integerID是一个character varying这两个表是相关的:如果它在第一个表中存在一行,那么taxonomy_id = N它就会在第二个表中存在一行ID = N.toString。
现在,我想在这两个表之间进行连接;由于类型不匹配,“正常”连接自然不起作用。
你能帮我解决这个问题吗?
我正在使用PostgreSQL.
我有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) 我在 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) 这是面试时问我的面试问题,我无法回答。请帮忙..
连接两个表之间具有一对多关系的最有效方法是什么
我正在使用 MS Access 2013 中的食品采购/发票系统,并尝试创建一个 SQL 查询,该查询将返回每个单独食品的最新购买价格。
我对 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]?
更重要的是 …
像这样的查询
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)
执行时,c和b将彼此相乘并在 JSON 数组对象中产生重复的条目。
我尝试将查询更改为使用 2 个子查询,但出现各种错误和警告,例如“子查询必须只返回一列”等。
我也尝试使用LEFT OUTER JOIN,但我想我还没有掌握连接表的工作原理,因为它仅适用于b并且c仍然相乘并包含重复项。
编辑:DISTINCT在COALESCE函数上使用带有“无法识别 json 类型的相等运算符”的错误。
如何修复此查询并仅聚合唯一行?
我需要指定表b和c实际上都是VIEWs,而且它们都至少有一json_agg列,所以我不能只使用json_agg(DISTINCT b.*). 这太容易了。
这是一个重现问题的小片段:
--DROP TABLE …Run Code Online (Sandbox Code Playgroud) 我有两个表 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) join ×10
mysql ×4
postgresql ×3
oracle ×2
sql-server ×2
cross-apply ×1
datatypes ×1
date ×1
distinct ×1
foreign-key ×1
ms-access ×1
oracle-11g ×1
rdbms ×1
sorting ×1
union ×1