Sql 从所有表中选择所有记录,每个派生表都必须有自己的别名
我正在进行一个电子学习项目,其中有一个名为chapter的表格,其中有一个名为question_table的列。这是一个表格,其中添加了特定章节的问题 现在的问题是,我想显示我在下面的sql查询中使用的所有章节中的所有问题Sql 从所有表中选择所有记录,每个派生表都必须有自己的别名,sql,Sql,我正在进行一个电子学习项目,其中有一个名为chapter的表格,其中有一个名为question_table的列。这是一个表格,其中添加了特定章节的问题 现在的问题是,我想显示我在下面的sql查询中使用的所有章节中的所有问题 SELECT * FROM (SELECT `question_table` FROM `chapter`) 但它不起作用,并给出了错误: 每个派生表都必须有自己的别名 注意:我想用SQL而不是PHP来实现它。这里的派生表是SELECT的结果。。。。您需要给它一个别名,
SELECT * FROM (SELECT `question_table` FROM `chapter`)
但它不起作用,并给出了错误:
每个派生表都必须有自己的别名
注意:我想用SQL而不是PHP来实现它。这里的派生表是SELECT的结果。。。。您需要给它一个别名,如下所示:
SELECT * FROM (SELECT question_table FROM chapter) X;
编辑、重新创建动态表
如果您事先知道所有表,则可以合并它们,即:
SELECT * FROM
(
SELECT Col1, Col2, ...
FROM Chapter1
UNION
SELECT Col1, Col2, ...
FROM Chapter2
UNION
...
) X;
一般来说,要使用此解决方案,您需要使用来实现您的目标
但是,通常情况下,这表明您的表格设计中有异味-您的章节数据实际上应该在一个表格中,例如,按章节id分类
如果出于规模或性能原因确实需要对数据进行切分,则执行此操作的典型机制是跨多个数据库,而不是跨同一数据库中的表。MySql可以处理每个表中的大量行,如果表被适当地索引,性能将不会成为问题。在MySql中,您必须为每个子查询派生表提供一个别名:
SELECT * FROM (SELECT question_table FROM chapter) t --notice the alias "t"
首先,我认为你最好重新设计你的数据库。相同结构的多个表包含相同的数据通常不是一个好主意 但是,您需要的是使用MySQL过程来构建一些动态SQL,然后执行它,返回结果数据 可使用以下程序进行此操作:-
DROP PROCEDURE IF EXISTS dynamic;
delimiter //
CREATE PROCEDURE dynamic()
BEGIN
DECLARE question_table_value VARCHAR(25);
DECLARE b INT DEFAULT 0;
DECLARE c TEXT DEFAULT '';
DECLARE cur1 CURSOR FOR SELECT `question_table` FROM `chapter`;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
OPEN cur1;
SET b = 0;
WHILE b = 0 DO
FETCH cur1 INTO question_table_value;
IF b = 0 THEN
IF c = '' THEN
SET c = CONCAT('SELECT * FROM `',question_table_value, '`');
ELSE
SET c = CONCAT(c, ' UNION SELECT * FROM `',question_table_value, '`');
END IF;
END IF;
END WHILE;
CLOSE cur1;
SET @stmt1 := c;
PREPARE stmt FROM @stmt1;
EXECUTE stmt;
END
这是创建一个名为dynamic的过程。这不需要参数。它设置一个光标,从章节表中读取问题表列值。它会查看结果,构建一个包含SQL的字符串,SQL是一个从每个表中选择并将结果联合在一起的字符串。然后准备并执行。该过程将返回默认执行的SQL的结果集
您可以使用以下方法调用此函数以返回结果:-
CALL dynamic()
不利的一面是,如果没有要返回的行,并且这些行不容易使用开发人员拥有的常规工具进行维护或调试,那么这将不会产生很好的结果。添加到以后很少有人有任何真正的存储过程技能来维护它。这只给出了表名我想从每个表中选择所有数据还有其他方法吗?这只给出了表名我想从每个表中选择所有数据你的实际问题是什么?我想显示所有问题。我已经为每个章节创建了单独的表格,所以我想选择所有章节并从每个章节中选择所有问题chapter@RahulPrajapati虽然SO社区的许多成员看起来确实是通灵的,但我们并非都是如此。在MySQL中,这不可能作为一个单独的查询。您需要从表中进行选择,而不是从子查询返回表名。您需要动态构建sql,以便从联合在一起的每个表中进行选择。这可能在mysql过程中完成。@Kickstart我是mysql过程的新手。你能解释一下如何使用这个程序吗。