Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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 在许多表上按SQL排序_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql 在许多表上按SQL排序

Mysql 在许多表上按SQL排序,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有这张桌子 Table1 id | name | 1 | a | 2 | c | 还有像这样的桌子 Table2 id | name | 1 | b | 2 | d | 如何将这两个表按结果排序 a、b、c、d 但它只会给我这个结果 a、c、b、d 当我尝试这个的时候 SELECT * FROM Table1 AS t1 JOIN Table2 AS t2 ON t2.id = t1.id ORDER BY t

我有这张桌子

Table1
 id  |  name  |
  1  |   a    |
  2  |   c    |
还有像这样的桌子

Table2
 id  |  name  |
  1  |   b    |
  2  |   d    |
如何将这两个表按结果排序

a、b、c、d

但它只会给我这个结果

a、c、b、d

当我尝试这个的时候

SELECT * FROM Table1 AS t1 JOIN Table2 AS t2 ON t2.id = t1.id
ORDER BY t1.name ASC, t2.name ASC;
您可以尝试使用两个表的并集:

SELECT id, name
FROM Table1
UNION ALL
SELECT id, name
FROM Table2
ORDER BY name
如果要保留每个记录的原始源信息,可以为此添加一列:

SELECT id, name, 't1' AS source
FROM Table1
UNION ALL
SELECT id, name, 't2'
FROM Table2
ORDER BY name
更新:

如果Codeigniter不支持开箱即用的UNION,则始终可以将上述查询放入字符串中并以本机方式执行:

$sql = "SELECT id, name FROM Table1 UNION ALL SELECT id, name FROM Table2 ORDER BY name";
$this->db->query($sql);
您可以尝试使用两个表的并集:

SELECT id, name
FROM Table1
UNION ALL
SELECT id, name
FROM Table2
ORDER BY name
如果要保留每个记录的原始源信息,可以为此添加一列:

SELECT id, name, 't1' AS source
FROM Table1
UNION ALL
SELECT id, name, 't2'
FROM Table2
ORDER BY name
更新:

如果Codeigniter不支持开箱即用的UNION,则始终可以将上述查询放入字符串中并以本机方式执行:

$sql = "SELECT id, name FROM Table1 UNION ALL SELECT id, name FROM Table2 ORDER BY name";
$this->db->query($sql);

如果要使用联接,请尝试下面的查询

select * from (select x.* from table1 as x  left join table2 as y on x.id = y.id) as z order by z.name;

如果要使用联接,请尝试下面的查询

select * from (select x.* from table1 as x  left join table2 as y on x.id = y.id) as z order by z.name;
我们也可以使用这个:

SELECT * FROM (
    SELECT id, NAME FROM Table1
    UNION ALL
    SELECT id, NAME FROM Table2) t ORDER BY name
我们也可以使用这个:

SELECT * FROM (
    SELECT id, NAME FROM Table1
    UNION ALL
    SELECT id, NAME FROM Table2) t ORDER BY name


所以我应该让它联合而不是加入?联合对我来说似乎最有意义。也许你也可以看看@jelliaes的加入选项。但是我不明白临时工的答案是从哪里来的。是的,使用工会。这会让你的生活更轻松。tnx@TimBiegeleisen作为答案,那么我应该让它成为联盟而不是加入?联盟对我来说似乎最有意义。也许你也可以看看@jelliaes的加入选项。但是我不明白临时工的答案是从哪里来的。是的,使用工会。这会让你的生活变得更轻松。tnx@TimBiegeleisen作为答案,你能解释一下这个临时表是从哪里来的吗?@pureRymorOrganization临时表是一个临时表,我在其中插入了表1和表2的组合值。该查询与SQL SERVER兼容。顺便说一句,如果两个表有相同的值,为什么不为它们使用一个表呢?实际上它有其他数据,这就是为什么我没有加入它们的原因。因此,如果它不是SQL SERVER,它也是兼容的?例如,MySqlIt肯定会与SQL SERVER一起工作。我不确定mysql。我认为它们有不同的语法来创建临时表。你能解释一下临时表是从哪里来的吗?@purelymrorganization临时表是一个临时表,我在其中插入了表1和表2的组合值。该查询与SQL SERVER兼容。顺便说一句,如果两个表有相同的值,为什么不为它们使用一个表呢?实际上它有其他数据,这就是为什么我没有加入它们的原因。因此,如果它不是SQL SERVER,它也是兼容的?例如,MySqlIt肯定会与SQL SERVER一起工作。我不确定mysql。我认为它们有不同的语法来创建临时表。您不需要在此处使用子查询进行排序,事实上,子查询可能会大大降低速度。是的,如果数据量很大,但这也是应该知道的,因此我将其作为一种替代方法发布。您不需要在此处使用子查询进行排序,事实上,子查询可能会大大降低速度。是的,如果有大量数据,但这也应该是已知的,因此我将其作为替代发布。是的,因此它将按id比较数据,合并记录并返回结果集。我看到了,但在CodeIgnitery中转换它非常困难,因此它将按id比较数据,合并记录并返回结果集哦,我看到了,但在CodeIgniter中转换它太困难了,这是正确的顺序逻辑。您也可以按id排序,它给出相同的结果。按int列排序也总是好的。@KumarHarsh我想按表1和表2列中的所有项排序name@KumarHarsh为什么他们没有很好的逻辑来点名?我删掉了我的评论是什么是正确的顺序逻辑。你也可以按id排序,它会给出相同的结果。按int列排序总是好的。@KumarHarsh我想按表1和表2列中的所有列排序name@KumarHarsh为什么他们没有按名字排序的好逻辑?我删除了我的评论