【问题标题】:Returning a specific type of entry in a table (SQL)返回表中特定类型的条目 (SQL)
【发布时间】:2016-03-03 12:29:51
【问题描述】:

我有三个表 Buildings、EnergyType 和 EnergyCategory。前两个通过名为 build_types 的桥接表连接。后两个通过具有相关 ID (type_ID = cat_ID) 连接。

此连接输出建筑物及其使用的每种能源类型:

SELECT B.building, E.energytype
FROM Buildings b
INNER JOIN build_types bt ON B.build_ID = bt.build_ID
INNER JOIN EnergyTypes e ON bt.type_ID = E.type_ID
ORDER BY B.building;

这个连接输出每种能量类型的总数:

SELECT E.energytype, COUNT(*)
FROM Buildings b
LEFT JOIN build_types bt ON B.build_ID = bt.build_ID
LEFT JOIN EnergyTypes e ON bt.type_ID = E.type_ID
GROUP BY E.energytype;

我想要一个 select 语句,它将返回一个表格,其中左侧是建筑物名称,右侧是能源类别,其中仅描述了“可再生”类别。我有:

SELECT B.building, E.energytype, E.energycategory
FROM Buildings b
INNER JOIN build_types bt ON B.build_ID = bt.build_ID
INNER JOIN EnergyTypes e ON bt.type_ID = E.type_ID
INNER JOIN EnergyCategories e ON E.cat_ID = E.type_ID
WHERE E.energycategory = 'Renewable';

但我收到错误 1066: Not unique table/alias 'EnergyTypes'。

【问题讨论】:

  • 我认为错误是因为您有两个表别名为 e。换一个
  • type_ID = cat_ID - 这听起来像是一场等待发生的事故
  • 将能源类别的别名设为喜欢 ec

标签: mysql


【解决方案1】:

更改其中一张表的别名。为其中一个制作“e”的其他东西。

【讨论】:

    【解决方案2】:

    您为EnergyTypesEnergyCategories 选择了别名“E”。

    SELECT B.building, T.energytype, C.energycategory
    FROM Buildings b
    INNER JOIN build_types bt ON B.build_ID = bt.build_ID
    INNER JOIN EnergyTypes T ON bt.type_ID = T.type_ID
    INNER JOIN EnergyCategories C ON C.cat_ID = T.type_ID
    WHERE C.energycategory = 'Renewable';
    

    应该可以。

    【讨论】:

    • 为什么别名很重要?我可以写 SELECT Buildings.building、EnergyTypes.energytype、EnergyCategories.energycategory 吗?
    猜你喜欢
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2018-09-19
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多