Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询:选择链接表的行并捕获一个“";“更大”;数据集_Mysql_Dataset_Row_Create Table - Fatal编程技术网

MySQL查询:选择链接表的行并捕获一个“";“更大”;数据集

MySQL查询:选择链接表的行并捕获一个“";“更大”;数据集,mysql,dataset,row,create-table,Mysql,Dataset,Row,Create Table,我试图找出如何构建满足以下条件的查询 我有两张桌子。表a存储作者列表。表b存储了一个图书列表。我有一个链接表c,它将每个作者映射到一本或多本书。当然,一本书可以有不止一位作者。给一个作者起个名字(让我们取名字=“道格拉斯·亚当斯”),我知道如果我这样做了 SELECT * FROM linktable INNER JOIN a ON linktable.a_id = a.id INNER JOIN b ON linktable.p_id = b.id WHERE a.name =

我试图找出如何构建满足以下条件的查询

我有两张桌子。表
a
存储作者列表。表
b
存储了一个图书列表。我有一个链接表
c
,它将每个作者映射到一本或多本书。当然,一本书可以有不止一位作者。给一个作者起个名字(让我们取名字=“道格拉斯·亚当斯”),我知道如果我这样做了

SELECT * FROM linktable
    INNER JOIN a ON linktable.a_id = a.id
    INNER JOIN b ON linktable.p_id = b.id
WHERE a.name = 'Douglas Adams';
我得到了道格拉斯·亚当斯写的所有书。让我们假设,道格拉斯·亚当斯有时有“合著者”。我怎么得到它们

我想要一个列表,它看起来是这样的:

Douglas Adams, The Hitchhiker's Guide to the Galaxy, maybe more details...
Douglas Adams, Book_2, maybe more details...
Coauthor_1, Book_2, same Details as in "Douglas Adams, Book_2, maybe more details..."
这可行吗?
我已经创建了3个表,它们映射了我想要存储的内容和我想要检索的内容

这两个存储表是:

CREATE TABLE `a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`),
  KEY `name_INDEX` (`name`),
  FULLTEXT KEY `name_FULLTEXT` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=932723 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

CREATE TABLE `b` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `title_fulltext` (`title`)
) ENGINE=MyISAM AUTO_INCREMENT=1617432
还有第三个表,它链接了上面的两个表

CREATE TABLE `linktable` (
  `a_id` int(11) NOT NULL,
  `b_id` int(11) NOT NULL,
  KEY `a_id_INDEX` (`a_id`),
  KEY `b_id_INDEX` (`b_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
这应该起作用:

SELECT * FROM b where b.id in(SELECT c.b_id 
FROM a,c
WHERE a.author = "Douglas Adams"
AND a.id= c.a_id)
编辑,备选:

SELECT * 
FROM A,B,
(SELECT c.b_id, c.a_id
    FROM a,c
    WHERE a.author = "Douglas Adams"
    AND a.id= c.a_id) X
WHERE b.id = x.b_id
    AND a.id = x.a_id
这应该起作用:

SELECT * FROM b where b.id in(SELECT c.b_id 
FROM a,c
WHERE a.author = "Douglas Adams"
AND a.id= c.a_id)
编辑,备选:

SELECT * 
FROM A,B,
(SELECT c.b_id, c.a_id
    FROM a,c
    WHERE a.author = "Douglas Adams"
    AND a.id= c.a_id) X
WHERE b.id = x.b_id
    AND a.id = x.a_id


这很有效,谢谢!但我仍然有一些速度问题。我需要30秒才能开始。有没有办法加快速度?这些表格包含超过5000.000.000行…是的,对不起,对于大型记录集来说,这有点低效,备选方案应该更快谢谢你的备选方案。请允许我问一下,我很好奇上面乔的答案和我的答案之间的一些差异。你能对每项选择进行解释并公布结果吗?我可以自己制作表格,但如果没有相似数量的记录,我可能看不到我在寻找什么。谢谢你。梨:当然可以!您只是对运行时间差感兴趣,还是想了解更多细节。细节的问题是,我不想在这里展示我的数据,所以我修改了数据并问了一些类似的问题,这样我就可以提取出答案的想法并使其适应我的问题。如果你能说得更具体些,我会很乐意回答你的问题。这很有效,谢谢!但我仍然有一些速度问题。我需要30秒才能开始。有没有办法加快速度?这些表格包含超过5000.000.000行…是的,对不起,对于大型记录集来说,这有点低效,备选方案应该更快谢谢你的备选方案。请允许我问一下,我很好奇上面乔的答案和我的答案之间的一些差异。你能对每项选择进行解释并公布结果吗?我可以自己制作表格,但如果没有相似数量的记录,我可能看不到我在寻找什么。谢谢你。梨:当然可以!您只是对运行时间差感兴趣,还是想了解更多细节。细节的问题是,我不想在这里展示我的数据,所以我修改了数据并问了一些类似的问题,这样我就可以提取出答案的想法并使其适应我的问题。如果你能说得更具体一点,我会很乐意回答你的问题。工作很有魅力。而且速度非常快。哇!超越了我的所有期望。我改编了你的conde代码片段,它工作得很好,但我必须承认,我不明白它为什么工作。请你向我解释一下你的方法好吗?我更感兴趣的是
SELECT
语句的行为方式,而不是最后的“ORDER”语句。提前谢谢@我会试着一桌一桌地把它分解。对表
a
的第一次引用确定了所需的作者——“道格拉斯·亚当斯”。接下来的两个链接到
linktable
b
中,识别由“道格拉斯·亚当斯”撰写的所有书籍。
linktable
的第二个连接查找“Douglas Adams”编写的所有书籍的所有作者,而
a
的最后一个连接检索这些作者的姓名,其中包括“Douglas Adams”本人。那有用吗?那帮了大忙。我在一张纸上想象了这些关系,但我不确定是否正确。有了你的评论,我肯定知道,谢谢!工作得很有魅力。而且速度非常快。哇!超越了我的所有期望。我改编了你的conde代码片段,它工作得很好,但我必须承认,我不明白它为什么工作。请你向我解释一下你的方法好吗?我更感兴趣的是
SELECT
语句的行为方式,而不是最后的“ORDER”语句。提前谢谢@我会试着一桌一桌地把它分解。对表
a
的第一次引用确定了所需的作者——“道格拉斯·亚当斯”。接下来的两个链接到
linktable
b
中,识别由“道格拉斯·亚当斯”撰写的所有书籍。
linktable
的第二个连接查找“Douglas Adams”编写的所有书籍的所有作者,而
a
的最后一个连接检索这些作者的姓名,其中包括“Douglas Adams”本人。那有用吗?那帮了大忙。我在一张纸上想象了这些关系,但我不确定是否正确。有了你的评论,我肯定知道,谢谢!