多对多连接,无重复行

Dmi*_*yJS 4 mysql sql join

我有几个具有多对多关系的表。\n例如表视频架构

\n\n
CREATE TABLE `videos` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `description` varchar(10000) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=47606 DEFAULT CHARSET=utf8;\n
Run Code Online (Sandbox Code Playgroud)\n\n

和两个表 actor film_actors,例如 writers 和 film_writers

\n\n

演员和电影演员模式

\n\n
CREATE TABLE `actors` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `name` varchar(255) DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `actors_UN` (`name`)\n) ENGINE=InnoDB AUTO_INCREMENT=152216 DEFAULT CHARSET=utf8;\n\n\nCREATE TABLE `film_actors` (\n  `actor_id` int(11) NOT NULL,\n  `film_id` int(11) NOT NULL,\n  PRIMARY KEY (`film_id`,`actor_id`),\n  KEY `FKrs472oyyff3hfwq10pyo94k1d` (`actor_id`),\n  CONSTRAINT `FK12uvap3je50qd8cq3s0jf7h7r` FOREIGN KEY (`film_id`) REFERENCES `videos` (`id`) ON DELETE CASCADE,\n  CONSTRAINT `FKrs472oyyff3hfwq10pyo94k1d` FOREIGN KEY (`actor_id`) REFERENCES `actors` (`id`) ON DELETE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n
Run Code Online (Sandbox Code Playgroud)\n\n

作家

\n\n
CREATE TABLE `writers` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `name` varchar(255) NOT NULL,\n  PRIMARY KEY (`id`),\n  UNIQUE KEY `writers_UN` (`name`)\n) ENGINE=InnoDB AUTO_INCREMENT=39875 DEFAULT CHARSET=utf8;\n\nCREATE TABLE `film_writers` (\n  `film_id` int(11) NOT NULL,\n  `writer_id` int(11) NOT NULL,\n  PRIMARY KEY (`writer_id`,`film_id`),\n  KEY `FKh0kfwnarp6utb4f80ycj1lap` (`film_id`),\n  CONSTRAINT `FK4hwpb5l48m0xps6jqn1wyjb63` FOREIGN KEY (`writer_id`) REFERENCES `writers` (`id`) ON DELETE CASCADE,\n  CONSTRAINT `FKh0kfwnarp6utb4f80ycj1lap` FOREIGN KEY (`film_id`) REFERENCES `videos` (`id`) ON DELETE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试与演员和作家一起选择电影信息,但结果包含许多重复的行。我使用这个sql查询

\n\n
SELECT\n    vid.id,\n    vid.title,\n    vid.original_title_name,\n    vid.`year`,\n    ac.id as actor_id,\n    ac.name as actor_name,\n    wr.id as writer_id,\n    wr.name as writer_name\nfrom\n    (\n    select\n        *\n    From\n        videos v\n    where\n        v.id = 1722\n    ) vid\nJOIN film_actors fa ON\n    vid.id = fa.film_id\nJOIN actors ac ON\n    fa.actor_id = ac.id\nJOIN film_writers fw ON\n    vid.id = fw.film_id\nJOIN writers wr ON\n    fw.writer_id = wr.id\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出是很多重复行。

\n\n
id   |title           |original_title_name |year |actor_id |actor_name         |writer_id |writer_name    |\n-----|----------------|--------------------|-----|---------|-------------------|----------|---------------|\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |1796     |\xd0\x9c\xd0\xb0\xd0\xb9\xd0\xba\xd0\xbb \xd0\x94\xd0\xb6. \xd0\xa4\xd0\xbe\xd0\xba\xd1\x81     |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |2648     |\xd0\x94\xd0\xb6\xd0\xbe\xd1\x80\xd0\xb4\xd0\xb6 \xd0\x94\xd0\xb8\xd0\xa7\xd0\xb5\xd0\xbd\xd1\x86\xd0\xbe     |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |4807     |\xd0\x9a\xd1\x80\xd0\xb8\xd1\x81\xd0\xbf\xd0\xb8\xd0\xbd \xd0\x93\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb5\xd1\x80     |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |7601     |\xd0\x9a\xd1\x80\xd0\xb8\xd1\x81\xd1\x82\xd0\xbe\xd1\x84\xd0\xb5\xd1\x80 \xd0\x9b\xd0\xbb\xd0\xbe\xd0\xb9\xd0\xb4    |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |8195     |\xd0\x9b\xd0\xb8\xd0\xb0 \xd0\xa2\xd0\xbe\xd0\xbc\xd0\xbf\xd1\x81\xd0\xbe\xd0\xbd        |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |8707     |\xd0\x9c\xd0\xb0\xd1\x80\xd0\xba \xd0\x9c\xd0\xb0\xd0\xba\xd0\x9a\xd0\xbb\xd1\x8e\xd1\x80       |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |9242     |\xd0\xa4\xd1\x80\xd1\x8d\xd0\xbd\xd1\x81\xd0\xb8\xd1\x81 \xd0\x9b\xd0\xb8 \xd0\x9c\xd0\xb0\xd0\xba\xd0\x9a\xd0\xb5\xd0\xb9\xd0\xbd |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |9602     |\xd0\xa3\xd1\x8d\xd0\xbd\xd0\xb4\xd0\xb8 \xd0\x94\xd0\xb6\xd0\xbe \xd0\xa1\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb1\xd0\xb5\xd1\x80  |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |10545    |\xd0\x9a\xd0\xbb\xd0\xb0\xd1\x83\xd0\xb4\xd0\xb8\xd1\x8f \xd0\xa3\xd1\x8d\xd0\xbb\xd0\xbb\xd1\x81      |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |10546    |\xd0\xa2\xd0\xbe\xd0\xbc\xd0\xb0\xd1\x81 \xd0\xa4. \xd0\xa3\xd0\xb8\xd0\xbb\xd1\x81\xd0\xbe\xd0\xbd    |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |1796     |\xd0\x9c\xd0\xb0\xd0\xb9\xd0\xba\xd0\xbb \xd0\x94\xd0\xb6. \xd0\xa4\xd0\xbe\xd0\xba\xd1\x81     |320       |\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x97\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xba\xd0\xb8\xd1\x81 |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |2648     |\xd0\x94\xd0\xb6\xd0\xbe\xd1\x80\xd0\xb4\xd0\xb6 \xd0\x94\xd0\xb8\xd0\xa7\xd0\xb5\xd0\xbd\xd1\x86\xd0\xbe     |320       |\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x97\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xba\xd0\xb8\xd1\x81 |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |4807     |\xd0\x9a\xd1\x80\xd0\xb8\xd1\x81\xd0\xbf\xd0\xb8\xd0\xbd \xd0\x93\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb5\xd1\x80     |320       |\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x97\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xba\xd0\xb8\xd1\x81 |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |7601     |\xd0\x9a\xd1\x80\xd0\xb8\xd1\x81\xd1\x82\xd0\xbe\xd1\x84\xd0\xb5\xd1\x80 \xd0\x9b\xd0\xbb\xd0\xbe\xd0\xb9\xd0\xb4    |320       |\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x97\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xba\xd0\xb8\xd1\x81 |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |8195     |\xd0\x9b\xd0\xb8\xd0\xb0 \xd0\xa2\xd0\xbe\xd0\xbc\xd0\xbf\xd1\x81\xd0\xbe\xd0\xbd        |320       |\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x97\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xba\xd0\xb8\xd1\x81 |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |8707     |\xd0\x9c\xd0\xb0\xd1\x80\xd0\xba \xd0\x9c\xd0\xb0\xd0\xba\xd0\x9a\xd0\xbb\xd1\x8e\xd1\x80       |320       |\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x97\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xba\xd0\xb8\xd1\x81 |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |9242     |\xd0\xa4\xd1\x80\xd1\x8d\xd0\xbd\xd1\x81\xd0\xb8\xd1\x81 \xd0\x9b\xd0\xb8 \xd0\x9c\xd0\xb0\xd0\xba\xd0\x9a\xd0\xb5\xd0\xb9\xd0\xbd |320       |\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x97\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xba\xd0\xb8\xd1\x81 |\n
Run Code Online (Sandbox Code Playgroud)\n\n

是否有可能以某种方式将结果转换为类似的结果?

\n\n
id   |title           |original_title_name |year |actor_id |actor_name         |writer_id |writer_name    |\n-----|----------------|--------------------|-----|---------|-------------------|----------|---------------|\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |1796     |\xd0\x9c\xd0\xb0\xd0\xb9\xd0\xba\xd0\xbb \xd0\x94\xd0\xb6. \xd0\xa4\xd0\xbe\xd0\xba\xd1\x81     |319       |\xd0\x91\xd0\xbe\xd0\xb1 \xd0\x93\xd0\xb5\xd0\xb9\xd0\xbb       |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |2648     |\xd0\x94\xd0\xb6\xd0\xbe\xd1\x80\xd0\xb4\xd0\xb6 \xd0\x94\xd0\xb8\xd0\xa7\xd0\xb5\xd0\xbd\xd1\x86\xd0\xbe     |320       |\xd0\xa0\xd0\xbe\xd0\xb1\xd0\xb5\xd1\x80\xd1\x82 \xd0\x97\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xba\xd0\xb8\xd1\x81 |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |4807     |\xd0\x9a\xd1\x80\xd0\xb8\xd1\x81\xd0\xbf\xd0\xb8\xd0\xbd \xd0\x93\xd0\xbb\xd0\xbe\xd0\xb2\xd0\xb5\xd1\x80     |          |               |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |7601     |\xd0\x9a\xd1\x80\xd0\xb8\xd1\x81\xd1\x82\xd0\xbe\xd1\x84\xd0\xb5\xd1\x80 \xd0\x9b\xd0\xbb\xd0\xbe\xd0\xb9\xd0\xb4    |          |               |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |8195     |\xd0\x9b\xd0\xb8\xd0\xb0 \xd0\xa2\xd0\xbe\xd0\xbc\xd0\xbf\xd1\x81\xd0\xbe\xd0\xbd        |          |               |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |8707     |\xd0\x9c\xd0\xb0\xd1\x80\xd0\xba \xd0\x9c\xd0\xb0\xd0\xba\xd0\x9a\xd0\xbb\xd1\x8e\xd1\x80       |          |               |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |9242     |\xd0\xa4\xd1\x80\xd1\x8d\xd0\xbd\xd1\x81\xd0\xb8\xd1\x81 \xd0\x9b\xd0\xb8 \xd0\x9c\xd0\xb0\xd0\xba\xd0\x9a\xd0\xb5\xd0\xb9\xd0\xbd |          |               |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |9602     |\xd0\xa3\xd1\x8d\xd0\xbd\xd0\xb4\xd0\xb8 \xd0\x94\xd0\xb6\xd0\xbe \xd0\xa1\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb1\xd0\xb5\xd1\x80  |          |               |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |10545    |\xd0\x9a\xd0\xbb\xd0\xb0\xd1\x83\xd0\xb4\xd0\xb8\xd1\x8f \xd0\xa3\xd1\x8d\xd0\xbb\xd0\xbb\xd1\x81      |          |               |\n1722 |\xd0\x9d\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xb4 \xd0\xb2 \xd0\xb1\xd1\x83\xd0\xb4\xd1\x83\xd1\x89\xd0\xb5\xd0\xb5 |Back to the Future  |1985 |10546    |\xd0\xa2\xd0\xbe\xd0\xbc\xd0\xb0\xd1\x81 \xd0\xa4. \xd0\xa3\xd0\xb8\xd0\xbb\xd1\x81\xd0\xbe\xd0\xbd    |          |               |\n
Run Code Online (Sandbox Code Playgroud)\n

Cai*_*ard 5

您获得“重复”行的原因是因为一部电影有许多演员,而一部电影有许多作家。电影演员和电影编剧之间根本没有任何关系

用于教育目的的简单查询:

SELECT * 
FROM
  films 
  INNER JOIN actors on films.id = actors.filmid
  INNER JOIN writers on films.id = writers.filmid
Run Code Online (Sandbox Code Playgroud)

这是为了表达我的观点而简化的,它隐藏了将多:多关系分解为多:一的表的复杂性

现在。如果一部电影有 10 位演员和 11 位编剧,则此查询将生成 110 行

每个演员都会与每个作家联系在一起

为什么?因为电影演员和电影编剧之间绝对没有任何关系。这两件事根本没有任何关系。我们没有在 JOIN 条件中编写任何内容来断言某个 actor 属性等于某个 writer 属性,因为我们不能- 没有任何东西可以将它们两个联系在一起

结果,数据库唯一可能做的就是生成一个行集,其中每个演员/作者组合都有一行。演员数据重复11次,作家数据重复10次

Actor1/Writer1
Actor1/Writer2
...
Actor2/Writer1
Actor2/Writer2
...
Actor10/Writer11
Run Code Online (Sandbox Code Playgroud)

没有办法解决这个“问题”——它是由于试图将两个不相关的事物放在一个查询上而引起的。唯一的“解决方案”是不要将它们放在同一个查询中。如果您正在编写像 IMDB 这样的网站,并且您有一个电影网页,有两个选项卡,一个用于演员,一个用于作家,请运行两个单独的查询(电影加入演员)和(电影加入作家)来填充数据每个选项卡 - 你根本无法*在一个查询中完成它。

*当我说“不能”时,我的意思是“真的不应该”。您发布的“期望结果”网格毫无充分理由地将演员 1796 与作家 319 关联起来- 一行上的所有内容都应该是相关的,这两个实体除了一些任意决定之外没有任何关系,即它们都排名第一当他们的 id 按升序排列时。虽然有一些方法可以用来将它们关联起来并从查询中消除笛卡尔积,但这是一种可怕的代码味道,表明您正在完全解决一些其他问题(我们看不到)。走错路了(抱歉)