【问题标题】:How to correctly use Order By with Inner Joins如何正确使用带有内连接的 Order By
【发布时间】:2012-05-28 15:22:30
【问题描述】:

我有一个类似于以下内容的 SQL 语句:

SELECT * FROM table1 AS bl  
INNER JOIN table2 AS vbsa ON bl.id=vbsa.businesslisting_id AND vbsa.section_id ='70'  
INNER JOIN table3 AS vbla ON bl.id=vbla.businesslisting_id AND vbla.location_id='1'  
WHERE bl.published = '1' 
ORDER BY bl.listing_type DESC

由于某种原因,这不会返回任何行,但是如果我删除 ORDER BY 子句,它确实会返回行。任何想法为什么会这样?

列listing_type 确实存在于数据库中并包含数值。它设置为 varchar 类型。我想这可能是问题所在,但我尝试了不同的列 (ID),但它仍然不起作用。

谢谢 罗伯特

【问题讨论】:

  • ORDER BY 不应该过滤结果,因此除非 mysql 中存在错误(极不可能),否则无论ORDER BY 如何,行数都必须相同。我建议如果您使用任何 gui 工具来运行查询,请确保它不会过滤任何内容。
  • 不试图过滤结果只是对它们进行排序。我同意,但如果我删除该条款,它确实有效。我也试过 table1.listing_type ,没区别。
  • 那是对我问题的回应!?
  • 不,这是一个合适的评论。

标签: mysql sql-order-by inner-join


【解决方案1】:

试试这个

SELECT * FROM table1 AS bl  
INNER JOIN table2 AS vbsa ON bl.id = vbsa.businesslisting_id
INNER JOIN table3 AS vbla ON bl.id = vbla.businesslisting_id
WHERE bl.published = 1 AND vbsa.section_id = 70 AND vbla.location_id = 1
ORDER BY bl.listing_type DESC

还要确保在调试 SQL 时查看错误消息,尝试修复而不看到这些错误是很困难的

【讨论】:

  • 感谢您的回复。尝试了您的建议,但收到错误:104 - SELECT 将检查超过 MAX_JOIN_SIZE 行;检查您的 WHERE 并使用 SET SQL_BIG_SELECTS=1 或 SET SQL_MAX_JOIN_SIZE=# 如果 SELECT 没问题
【解决方案2】:

发现问题。我一直在研究其他人的代码,他们没有为相关表添加索引。

因此,当我添加按属性排序并运行查询时,它超出了 MAX_JOIN_SIZE 行。

我添加了索引,现在它可以完美运行了。

感谢大家的意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多