Mysql 从表1中选择1行,然后从另一个表中选择n行,返回到第一个表并选择第2行,依此类推
我有以下SQL脚本:Mysql 从表1中选择1行,然后从另一个表中选择n行,返回到第一个表并选择第2行,依此类推,mysql,database,mariadb,Mysql,Database,Mariadb,我有以下SQL脚本: CREATE TABLE `table_1` ( `IDTable_1` int(11) NOT NULL, PRIMARY KEY (`IDTable_1`) ); CREATE TABLE `table_2` ( `IDTable_2` int(11) NOT NULL, `FK_Table_1` int(11) NOT NULL, PRIMARY KEY (`IDTable_2`,`FK_Table_1`), KEY `FK_Table_1`
CREATE TABLE `table_1` (
`IDTable_1` int(11) NOT NULL,
PRIMARY KEY (`IDTable_1`)
);
CREATE TABLE `table_2` (
`IDTable_2` int(11) NOT NULL,
`FK_Table_1` int(11) NOT NULL,
PRIMARY KEY (`IDTable_2`,`FK_Table_1`),
KEY `FK_Table_1` (`FK_Table_1`)
);
INSERT INTO `table_1` (`IDTable_1`) VALUES
(1),
(2),
(3);
INSERT INTO `table_2` (`IDTable_2`, `FK_Table_1`) VALUES
(1, 1),
(1, 2),
(2, 1),
(2, 3);
我想创建一个查询来获取如下数据:
表1中的1行
n出现IDTable_1
的行数
下一行来自表1
n出现以下IDTable_1
的行数
等等
使用提供的脚本数据的预期结果示例:
/*ID 1 from table_1*/
1
/*IDs from table_2 Where ID 1 from table_1 appears*/
1
2
/*ID 2 from table_1*/
2
/*IDs from table_2 Where ID 2 from table_1 appears*/
1
/*ID 3 from table_1*/
3
/*IDs from table_2 Where ID 3 from table_1 appears*/
2
但我不知道如何做到这一点。任何想法都将不胜感激。我们可以使用带有计算列的联合查询来实现这一点:
SELECT id
FROM
(
SELECT IDTable_1 AS id, IDTable_1 AS pos1, 1 AS pos2 FROM table_1
UNION ALL
SELECT IDTable_2, FK_Table_1, 2 FROM table_2
) t
ORDER BY
pos1,
pos2;
请注意,此处需要两级排序。第一级,
pos1
,将同一IDTable_1
组中的所有记录放在一起。然后,在每个组中,pos2
级别将第一个表的记录放在第二个表的记录之前。您的问题不清楚。查看以下哪项适合您:
-- close to your output, but formatted differently:
SELECT t2.IDTable_1 AS "Id of table_1",
GROUP_CONCAT(t2.id) AS "Ids of table_2"
FROM table_2
GROUP BY IDTable_1;
-- Count number of rows:
SELECT IDTable_1, COUNT(*)
FROM table_2
GROUP BY IDTable_1;
-- contents of both tables:
SELECT t1.*, t2.*
FROM table_1 AS t1
JOIN table_2 AS t2 ON t2.IDTable_1 = t1.id;