【问题标题】:sql get description 2 column on 1 tablesql 获取描述 1 表上的 2 列
【发布时间】:2018-10-19 15:51:06
【问题描述】:

我有 2 张桌子:

汽车

ID    Desc
1     BMW
2     Audi

用户

ID   Name    ID_car1     ID_car2
1    Jack       1           2

数据视图

ID    Name   ID_car1   Desc_car1    ID_car2    Desc_car2
1     Jack      1          BMW        2           Audi

如何查询以在数据视图上显示desc_car1desc_car2

【问题讨论】:

  • 您需要规范化您的数据库。这是一个链接。 stackoverflow.com/questions/3282510/database-normalization
  • 抱歉数据视图只针对php表的报告,如何获取这些数据?
  • 我看不出用户和汽车之间有任何关系。是否有第三张表存储这些信息?
  • 对不起,我已经编辑了数据

标签: mysql sql


【解决方案1】:

理想情况下,应该有第三个 junction 表来保持用户和汽车之间的关系。如果您希望文字查询在没有此类表的情况下生成上述输出,那么我们将不得不在caruser 之间使用交叉连接,因为不存在其他关系:

SELECT
    u.ID,
    u.Name,
    MAX(CASE WHEN c.ID = 1 THEN c.ID END) AS ID_car1,
    MAX(CASE WHEN c.ID = 1 THEN c.`Desc` END) AS Desc_car1,
    MAX(CASE WHEN c.ID = 2 THEN c.ID END) AS ID_car2,
    MAX(CASE WHEN c.ID = 2 THEN c.`Desc` END) AS Desc_car2
FROM car c
CROSS JOIN user u
GROUP BY
    u.ID,
    u.Name;

Demo

【讨论】:

    【解决方案2】:

    使用您最近的信息,我们可以使用查询获取数据视图,如下所示:

    select u.ID, u.Name,
      u.ID_car1, c1.Desc Desc_car1,
      u.ID_car2, c2.Desc Desc_car2
    from user u
      join car c1 on u.ID_car1=c1.ID
      join car c2 on u.ID_car2=c2.ID;
    

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 1970-01-01
      • 2017-04-25
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      相关资源
      最近更新 更多