假设我在MySQL数据库中有两个表。
表格1:
ID Name
1 Jim
2 Bob
表2:
ID Place Race_Number
1 2nd 1
1 3rd 2
1 4th 3
2 1st 1
2 2nd 2
2 2nd 3
从数据库中选择行时,是否有任何方法可以将第二个表中的行作为列连接到第一个表中?目前我正在使用SELECT * FROM Table1 NATURAL JOIN Table2
。
输出:
ID Name Place Race_Number
1 Jim 2nd 1
1 Jim 3rd 2
1 Jim 4th 3
2 Bob 1st 1
2 Bob 2nd 2
2 Bob 2nd 3
目前,我正在PHP脚本中对此进行排序,以将其排序为一个数组。这很痛苦,因为我必须查看ID,看看它们是否相同,然后进行相应的排序。我觉得有一种方法可以在MySQL中正确执行此操作,而不必在PHP中将其分类为数组。每个ID在第二个表中可以有无限多个条目。
直接从MySQL查询获得的期望结果是:
ID Name Race1 Race2 Race3
1 Jim 2nd 3rd 4th
2 Bob 1st 2nd 2nd
我自己无法在表中为Race1,Race2等创建列,因为每个ID可以有无限数量的比赛。
谢谢你的帮助!
一个INNER JOIN
就足够了您的需求。MySQL没有PIVOT
功能,您仍然可以使用CASE
和MAX()
功能对其进行仿真。
SELECT a.ID, a.NAME,
MAX(CASE WHEN b.Race_Number = 1 THEN b.Place ELSE NULL END) Race1,
MAX(CASE WHEN b.Race_Number = 2 THEN b.Place ELSE NULL END) Race2,
MAX(CASE WHEN b.Race_Number = 3 THEN b.Place ELSE NULL END) Race3
FROM Table1 a
INNER JOIN Table2 b
ON a.ID = b.ID
GROUP BY a.ID, a.Name
但是,如果您不知道的数量RACE
,则DYNAMIC SQL
首选a。
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN b.Race_Number = ', Race_Number,
' THEN b.Place END) AS ', CONCAT('`Race', Race_Number, '`'))
) INTO @sql
FROM Table2;
SET @sql = CONCAT('SELECT s.Student_name, ', @sql, '
FROM Table1 a
LEFT JOIN Table2 b
ON ON a.ID = b.ID
GROUP BY a.ID, a.Name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
问题内容: 我正在使用Microsoft SQL Server 2005。 我想我需要一个子查询。 我正在寻找每个客户一(1)行,其中AvailableAction字段是每个客户的所有操作的串联。 我希望输出为: 问题答案: 2005年起 我认为您无法使用FOR XML EXPLICIT来获得此功能,因此,如果这是2000,那么您就不走运了(就简单的解决方案而言)。
问题内容: 假设我在MySQL数据库中有两个表。 表格1: 表2: 从数据库中选择行时,是否有任何方法可以将第二个表中的行作为列连接到第一个表中? 直接从MySQL查询获得的期望结果是: 谢谢你的帮助! 问题答案: 这种数据转换类型称为PIVOT。MySQL没有枢轴函数,但是您可以使用带有表达式的聚合函数来复制它: 请参阅带有演示的SQL Fiddle。 这也可以使用您的多个联接来编写,并且您将在
问题内容: 如您所见,我在数据库连接上遇到问题。它给了我这个错误: …由于许多连接错误而被阻止 我搜索了一些答案,但无法解决问题。 我不知道我是否提供了您需要的所有信息,所以如果您需要其他信息,请告诉我。我有来自不同计算机的数据库连接,并且创建了一个用户来访问该数据库,但该用户位于主机行中,因此我想使用IP地址更改它以解决安全问题,因此出现了此错误,因此我卡住。 问题答案: MySQL会阻止连接时
我使用了以下命令进行端口映射 其中3306端口属于本地主机MySQL,33060是进入docker容器的端口,因此docker中的3306:33060之间正在进行通信。我的问题如下: docker:守护进程的错误响应:驱动程序未能在endpointApp1上编程外部连接(30EC933973ACF63A48EF9A20B0027AF18BD23E1F36CF852E3758EAA1F843):启动
我试图用JDBI编写一个对象查询,它将从左表中抓取一个完整的行,并将右表中所有匹配的行作为List(一个作者可以有很多本书)连接起来。 作者 图书编号、标题、作者、类别、创建日期、更新日期 我要创建的最终对象的结构如下所示: 书在哪里: 这是我正在尝试的查询(不按原样抓取图书列表) 如果有人能为我指出正确的方向,我将不胜感激! 谢谢
问题内容: 首先,我要感谢肯特·米利根(Kent Milligan)及其他的文章,网址为http://www.mcpressonline.com/sql/techtip-combining-multiple- row-values-into-a-single-row-with-sql-in-db2- for-i.html 使我尽可能地解决了这个问题。但是现在我需要扩大他在这里所做的事情。 为避免您