【问题标题】:Left Joining With Some default values使用一些默认值左连接
【发布时间】:2014-03-21 15:08:20
【问题描述】:

我正在尝试构建一个查询,该查询将采用一些默认值并与表保持连接。这只是为了在主查询(第二个)不匹配任何行的情况下允许至少一个结果,因此可能会返回空结果集as mentioned on my another question

我的查询大致如下:

SELECT * FROM(
    (SELECT 'test' as `column1`, 'test' as `column2`, 0 as c) t1
    LEFT JOIN
        (SELECT `column1`, `column2`, COUNT(*) as c
        FROM `my_table`
        WHERE `status` = 1
        GROUP BY column1, column2) t2
)

它在 phpmyadmin 上显示 mysql 错误如下:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't2 )' at line 7

请问查询有什么问题?

【问题讨论】:

    标签: mysql sql count group-by left-join


    【解决方案1】:

    我认为这是您想要的查询:

    SELECT t1.column1, t2.column2, coalesce(t2.c, 0)
    FROM (SELECT 'test' as `column1`, 'test' as `column2`, 0 as c
         ) t1 LEFT JOIN
         (SELECT `column1`, `column2`, COUNT(*) as c
          FROM `my_table`
          WHERE `status` = 1
          GROUP BY column1, column2
         ) t2
         on t1.column1 = t2.column1 and t1.column2 = t2.column2;
    

    您的查询不完整。例如,它没有on 子句。

    【讨论】:

    • 嗨,谢谢你的线索。但是,像您提供的那样修改我的查询,我面临另一个问题 "#1267 - Illegal mix of collat​​ions (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation '='" 。这两列都是“latin1_swedish_ci”排序规则类型。请问我该如何解决这个错误?
    • 听起来您的数据库排序规则与您的表排序规则不同。使用COLLATE 关键字。开始的地方在这里:dev.mysql.com/doc/refman/5.7/en/charset-collations.html.
    • 感谢您对解决该问题有很大帮助。但是,我现在有另一个关于手动制作的表 t1 的问题。尽管查询作为普通查询工作,但我的实现在“触发器”内,并且存在抛出错误。它的说法是“on 子句中的未知列 t1.column1”。触发器不接受手动制作的表格吗?请问如何恢复?
    • @Rana 。 . .触发器没有这样的限制。我建议您在发布您正在使用的触发代码的位置提出另一个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-12-05
    • 2015-08-21
    • 1970-01-01
    • 2021-09-27
    • 2010-12-12
    • 2012-03-20
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多