【问题标题】:SQL Query, JOIN and CASE statement giving errorsSQL 查询、JOIN 和 CASE 语句给出错误
【发布时间】:2021-01-31 07:31:06
【问题描述】:

在我添加 JOIN 和 WHERE 语句之前,我的查询一直有效。我需要从另一个表中加入 id,这样我就可以只过滤我想要的行。有什么建议吗?感谢您的帮助。

错误:#1066 - 不是唯一的表/别名:'ahv9t_facileforms_subrecords'

     SELECT
record,
MAX(CASE WHEN title = 'Listing ID' then value END) AS Listing,
MAX(CASE WHEN title = 'Status' then value END) AS Status,
MAX(CASE WHEN title = 'Resort' then value END) AS Resort,
MAX(CASE WHEN title = 'Points on Deed' then value END) AS Points,
MAX(CASE WHEN title = 'Use Year' then value END) AS UseYear,
MAX(CASE WHEN title = 'Points on Deed' then value END) AS Points,
MAX(CASE WHEN title = 'Last Years Points' then value END) AS LastYearPoints,
MAX(CASE WHEN title = 'This Years Points' then value END) AS ThisYearPoints,
MAX(CASE WHEN title = 'Next Years Points' then value END) AS NextYearPoints,
MAX(CASE WHEN title = 'Points Available' then value END) AS PointsAvailable,
MAX(CASE WHEN title = 'Price Per Point' then value END) AS PricePerPoint,
MAX(CASE WHEN title = 'Price' then value END) AS Price,
MAX(CASE WHEN title = 'Closing Cost' then value END) AS ClosingCost,
MAX(CASE WHEN title = 'Annual Dues at Closing' then value END) AS AnnualDuesAtClosing,
MAX(CASE WHEN title = 'Total Cost' then value END) AS TotalCost,
MAX(CASE WHEN title = 'Direct Price Per Point' then value END) AS DirectPricePerPoint,
MAX(CASE WHEN title = 'Savings' then value END) AS Savings,
MAX(CASE WHEN title = 'Contract Expires' then value END) AS ContractExpires,
MAX(CASE WHEN title = 'Current Annual Fees' then value END) AS CurrentAnnualFees
FROM ahv9t_facileforms_subrecords
JOIN ahv9t_facileforms_subrecords ON ahv9t_facileforms_records.id = ahv9t_facileforms_subrecords.record
WHERE ahv9t_facileforms_records.form = '12'
GROUP BY record

【问题讨论】:

  • 当你说它不起作用时,你是什么意思?另外,看起来你不应该有那些 ELSE 子句
  • 我正在关注关于 CASE 声明的 youtube 教程。他们没有指定,如果没有必要可以删除。我收到的错误是:#1066 - Not unique table/alias: 'ahv9t_facileforms_subrecords'
  • 这能回答你的问题吗? Not unique table/alias
  • 查看表别名,认真考虑处理应用代码中数据显示的问题
  • 我已经更新了我的问题并正在查看链接。

标签: mysql sql


【解决方案1】:

所以在我修复了 JOIN 部分之后。它给了我一个列“标题”是模棱两可的错误。所以我在“title=”前面为我的每一列/行添加了表名。那解决了它。现在我得到了我所追求的。

SELECT
record,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Listing ID' then value END) AS Listing,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Status' then value END) AS Status,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Resort' then value END) AS Resort,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Points on Deed' then value END) AS Points,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Use Year' then value END) AS UseYear,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Points on Deed' then value END) AS Points,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Last Years Points' then value END) AS LastYearPoints,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'This Years Points' then value END) AS ThisYearPoints,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Next Years Points' then value END) AS NextYearPoints,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Points Available' then value END) AS PointsAvailable,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Price Per Point' then value END) AS PricePerPoint,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Price' then value END) AS Price,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Closing Cost' then value END) AS ClosingCost,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Annual Dues at Closing' then value END) AS AnnualDuesAtClosing,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Total Cost' then value END) AS TotalCost,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Direct Price Per Point' then value END) AS DirectPricePerPoint,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Savings' then value END) AS Savings,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Contract Expires' then value END) AS ContractExpires,
MAX(CASE WHEN ahv9t_facileforms_subrecords.title = 'Current Annual Fees' then value END) AS CurrentAnnualFees
FROM ahv9t_facileforms_subrecords
JOIN ahv9t_facileforms_records ON ahv9t_facileforms_records.id = ahv9t_facileforms_subrecords.record
WHERE ahv9t_facileforms_records.form = '12'
GROUP BY record

【讨论】:

    【解决方案2】:

    请使用别名和每个表名来区分表调用:

    FROM ahv9t_facileforms_subrecords 作为 A

    加入 ahv9t_facileforms_records 作为 B ON B.ahv9t_facileforms_records.id = A.ahv9t_facileforms_subrecords.record

    WHERE A.ahv9t_facileforms_records.form = '12' 按记录分组

    【讨论】:

    • 我正计划清理它。目前正在努力不让我自己变得复杂,只是想让查询正常工作。感谢您的意见!
    【解决方案3】:

    因为您的查询缺少正确限定的列名,所以不清楚它到底在做什么。也就是说,我认为您正在尝试这样做:

    SELECT ffs.record,
           MAX(CASE WHEN ffs2.title = 'Listing ID' then ffs2.value END) AS Listing,
           MAX(CASE WHEN ffs2.title = 'Status' then ffs2.value END) AS Status,
           MAX(CASE WHEN ffs2.title = 'Resort' then ffs2.value END) AS Resort,
           MAX(CASE WHEN ffs2.title = 'Points on Deed' then ffs2.value END) AS Points,
           MAX(CASE WHEN ffs2.title = 'Use Year' then ffs2.value END) AS UseYear,
           MAX(CASE WHEN ffs2.title = 'Points on Deed' then ffs2.value END) AS Points,
           MAX(CASE WHEN ffs2.title = 'Last Years Points' then ffs2.value END) AS LastYearPoints,
           MAX(CASE WHEN ffs2.title = 'This Years Points' then ffs2.value END) AS ThisYearPoints,
           MAX(CASE WHEN ffs2.title = 'Next Years Points' then ffs2.value END) AS NextYearPoints,
           MAX(CASE WHEN ffs2.title = 'Points Available' then ffs2.value END) AS PointsAvailable,
           MAX(CASE WHEN ffs2.title = 'Price Per Point' then ffs2.value END) AS PricePerPoint,
           MAX(CASE WHEN ffs2.title = 'Price' then ffs2.value END) AS Price,
           MAX(CASE WHEN ffs2.title = 'Closing Cost' then ffs2.value END) AS ClosingCost,
           MAX(CASE WHEN ffs2.title = 'Annual Dues at Closing' then ffs2.value END) AS AnnualDuesAtClosing,
           MAX(CASE WHEN ffs2.title = 'Total Cost' then ffs2.value END) AS TotalCost,
           MAX(CASE WHEN ffs2.title = 'Direct Price Per Point' then ffs2.value END) AS DirectPricePerPoint,
           MAX(CASE WHEN ffs2.title = 'Savings' then ffs2.value END) AS Savings,
           MAX(CASE WHEN ffs2.title = 'Contract Expires' then ffs2.value END) AS ContractExpires,
           MAX(CASE WHEN ffs2.title = 'Current Annual Fees' then ffs2.value END) AS CurrentAnnualFees
    FROM ahv9t_facileforms_subrecords ffs JOIN
         ahv9t_facileforms_subrecords ffs2
         ON ffs.id = ffs2.record
    WHERE ffs.form = '12'
    GROUP BY ffs.record;
    

    一般来说,您应该限定所有列名。

    也就是说,我认为你可以在没有自我加入的情况下完成任何你想做的事情。但是您还没有解释那是什么,因此很难提供更多建议。我建议您提出一个新的问题,其中包含一组简化的数据和对您想要完成的目标的清晰解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      相关资源
      最近更新 更多