【问题标题】:Joining tables MySQL连接表 MySQL
【发布时间】:2014-01-06 03:46:34
【问题描述】:

如果我有以下表格

tbl1:

+------+-----------+
| sex  | type      |
+------+-----------+
|  m   | rolls     |
|  f   | acom      |
+------+-----------+

tbl2:

+------+-----------+
| age  | type      |
+------+-----------+
| 12   | rolls     |
| 25   | acom      |
+------+-----------+

如何创建一个视图来显示合并的两个表,但是性别和年龄变成了类别

+-----------+-----------+
| category  | type      |
+-----------+-----------+
|    m      | rolls     |
|    f      | acom      |
|   12      | rolls     |
|   25      | acom      |
+-----------+-----------+

谢谢。

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    您可以使用union 语句

    SELECT `sex` as `category`,`type` FROM `tbl1`
    UNION
    SELECT `age` as `category`,`type` FROM `tbl2`
    

    【讨论】:

    • THAAAAAANKS,它工作得很好。有没有办法将类别类型更改为 VARCHAR?
    【解决方案2】:

    你可以通过使用联合来做到这一点

    select sex as category, type from tbl1
    union
    select age as category, type from tbl2
    

    【讨论】:

      【解决方案3】:

      试试这个 union all 合并两张表http://dev.mysql.com/doc/refman/5.0/en/union.html

      select sex as category, type from table1
      union all
      select age as category, type from table2
      

      【讨论】:

        【解决方案4】:

        最好CAST 然后执行 UNION 以便列可以具有相同的数据类型,如下所示:

        CREATE VIEW `view1` AS
        SELECT CAST(`sex` as CHAR(50)) AS `category`, `type` FROM `tbl1`
        UNION
        SELECT CAST(`age` as CHAR(50)) AS `category`, `type` FROM `tbl2`;
        

        在一些早期版本的 MySQL 中,只会使用第一个 SELECT 的类型和长度。 http://dev.mysql.com/doc/refman/5.0/en/union.html

        【讨论】:

        • 有没有办法将类别类型更改为VARCHAR?我试过: SELECT CAST(sex as VARCHAR(10)) AS category, type FROM tbl1 但抛出错误
        • @user2611352 不,它不能转换为 VARCHAR。参考:stackoverflow.com/a/15368852
        【解决方案5】:

        试试这个查询

        create view v1 as 
        select cast(sex as char(10)) as category, type from tbl1
        union
        select cast(age as char(10)) as category, type from tbl2
        ;
        

        Results

        | CATEGORY |  TYPE |
        |----------|-------|
        |        m | rolls |
        |        f |  acom |
        |       12 | rolls |
        |       25 |  acom |
        

        【讨论】:

          猜你喜欢
          • 2011-06-14
          • 2011-09-22
          • 2013-06-05
          • 1970-01-01
          • 1970-01-01
          • 2011-01-27
          • 2021-12-25
          相关资源
          最近更新 更多