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为什么他们没有按名字排序的好逻辑?我删除了我的评论