MySQL在where子句中选择查询

Posted

技术标签:

【中文标题】MySQL在where子句中选择查询【英文标题】:MySQL select query in where clause 【发布时间】: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` 查询工作正常。

【问题讨论】:

不要引用/反引号你的列名。它们只会增加视觉上的混乱,只是你犯语法错误的另一种方式。您需要它们的唯一原因是如果您有一个保留字的列名,并且使用保留字的列名是一个糟糕的主意,因此您可以同时避免这两个坏习惯。 【参考方案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 中存储值的错误方式。您遇到了数据建模问题。

以上是关于MySQL在where子句中选择查询的主要内容,如果未能解决你的问题,请参考以下文章

7_mysql查询之where子句

Mysql在where子句中优化子查询

带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用

mysql子查询在where in子句中

在 MySQL 查询的 WHERE 子句中使用列别名会产生错误

JDBC WHERE子句条件实例