【问题标题】:MySQL select query in where clauseMySQL在where子句中选择查询
【发布时间】:2013-09-04 02:27:36
【问题描述】:

你能纠正这个查询吗?它显示了一些语法错误。

SELECT * 
 WHERE `id` IN (SELECT DISTINCT unit_trust_managing_company_id 
                  FROM ut_funds 
                 ORDER BY `company_name`)

SELECT DISTINCT unit_trust_managing_company_id FROM ut_funds ORDER BYcompany_name` 查询工作正常。

【问题讨论】:

  • 不要引用/反引号你的列名。它们只会增加视觉上的混乱,只是你犯语法错误的另一种方式。您需要它们的唯一原因是如果您有一个保留字的列名,并且使用保留字的列名是一个糟糕的主意,因此您可以同时避免这两个坏习惯。

标签: mysql sql select where


【解决方案1】:

在大多数(所有?)情况下,您可以在不使用 where 子句中的查询的情况下重写查询,并获得更好的性能。尝试类似:

  SELECT DISTINCT t.*
    FROM some_table t, ut_funds u
   WHERE t.id=u.unit_trust_managing_company_id

【讨论】:

    【解决方案2】:

    where 之前需要一个from 子句:

    SELECT *
    FROM <some table here>
    WHERE `id` IN (SELECT unit_trust_managing_company_id FROM ut_funds)
    

    此外,in 语句不需要 distinctorder by

    【讨论】:

    • 如果 "unit_trust_managing_company_id" 的值为 1,2,3.... 这个查询不起作用.... 至少在我的情况下... 请指导如何纠正这个问题。 ..
    • @AsadAliKhan 。 . .你应该问一个问题,而不是评论。在任何情况下,将多个整数值存储在一个字符串中是在 SQL 中存储值的错误方式。您遇到了数据建模问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2023-04-09
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多