mysql选择查询帮助 - ORDER BY

时间:2010-02-23 17:09:12

标签: sql mysql database union

我正在尝试构建一个select查询,它将获取4个表的所有列,然后按“name”列排序并显示结果(所有表中都相同)。我还在学习MySQL的绳索。

我发现因为列共享名称'name',所以只显示最后一个表的结果。有没有办法执行此查询,保留所有表中的所有数据?

我应该使用不同的列名吗?共享一个名称似乎更容易,因为每个名称都是相同的信息。

SELECT * FROM table_one, table_two, table_three, table_four ORDER BY...

四个表没有连接,结构不同......有些列名是共享的(看起来我应该修复,我现在还可以),但每个列都有不同的列数。

谢谢!

4 个答案:

答案 0 :(得分:3)

如果四个表之间没有关系,请改用UNION

SELECT a.name
  FROM TABLE_ONE a
UNION
SELECT b.name
  FROM TABLE_TWO b
UNION
SELECT c.name
  FROM TABLE_THREE c
UNION
SELECT d.name
  FROM TABLE_FOUR d
ORDER BY name

这里有两个选项 - UNION速度较慢,因为它会删除重复项 - 最终列表将是一个唯一的名称列表。 UNION ALL更快,因为它不会删除重复项。

要从表格中获取列,请使用:

SELECT a.*,
       b.*,
       c.*,
       d.*
  FROM (SELECT a.name
          FROM TABLE_ONE a
        UNION
        SELECT b.name
          FROM TABLE_TWO b
        UNION
        SELECT c.name
          FROM TABLE_THREE c
        UNION
        SELECT d.name
          FROM TABLE_FOUR d) x
LEFT JOIN TABLE_ONE a ON a.name = x.name
LEFT JOIN TABLE_TWO b ON b.name = x.name
LEFT JOIN TABLE_THREE c ON c.name = x.name
LEFT JOIN TABLE_FOUR d ON d.name = x.name

答案 1 :(得分:0)

是的,你应该使用不同的列名,但是为了获得所有数据,你也可以写下这样的问题:

SELECT table_one.* t1, table_two.* t2, table_three.* t3, table_four.* t4 FROM table_one, table_two, table_three, table_four ORDER BY...

答案 2 :(得分:0)

johnny_n,

你应该使用

 SELECT name as name1, name as name2, name as name3 etc...

显然,您需要使用正确的语法,但使用AS关键字,将允许您在查询中使用所需的密钥。

答案 3 :(得分:0)

如果他们共享相同的name ....

SELECT * 
    FROM table_one 
LEFT JOIN
    table_two USING(name)
LEFT JOIN
    table_three USING(name)
LEFT JOIN
    table_four USING(name)
ORDER BY name