带有 WHERE 子句的 MySql 内部连接 ​​[关闭]

Posted

技术标签:

【中文标题】带有 WHERE 子句的 MySql 内部连接 ​​[关闭]【英文标题】:MySql Inner Join with WHERE clause [closed] 【发布时间】:2012-09-04 01:57:58 【问题描述】:

这是我的代码:

 SELECT table1.f_id  FROM table1 WHERE table1.f_com_id = '430' AND      
 table1.f_status = 'Submitted' 
 INNER JOIN table2
 ON table2.f_id = table1.f_id
 where table2.f_type = 'InProcess'

我需要来自table1 的信息,因为与f_com_id 关联的所有ID 为430,状态为已提交,并且该类型应仅在存储在其他表中的进程中(table2

f_id 在两个表中都是 p_keyf_key。 但这给了我错误,我想我把WHERE 子句放错了,如何解决?

错误消息:#1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以获取在 'INNER JOIN table2 附近使用的正确语法 ON table2.f_id = ' 在第 2 行

【问题讨论】:

近 80k 浏览量,约 12 票问答,25+ 票。当然不会太本地化。 一个非常流行的语法错误,是的。可能不是太本地化,但仍然离题,就像其他语法错误一样。 【参考方案1】:

是的,你是对的。你把WHERE 子句放错了。您只能在单个查询中使用一个 WHERE 子句,因此请尝试使用 AND 处理多个条件,如下所示:

 SELECT table1.f_id  FROM table1 
   INNER JOIN table2
     ON table2.f_id = table1.f_id
 WHERE table2.f_type = 'InProcess'
   AND f_com_id = '430'
   AND f_status = 'Submitted' 

【讨论】:

thnx 很多..它对我有用.. 但我觉得 JOIN 操作总是一种成本更高的方法,我们可以在不使用 join 操作的情况下以其他方式做到这一点。如果可能的话? @AdityaKumar Join 是比其他方法更好的方法(例如子查询等)。更喜欢加入。见this SQLFiddle。【参考方案2】:

你只能写一个 where 子句。

 SELECT table1.f_id  FROM table1
 INNER JOIN table2
 ON table2.f_id = table1.f_id
 where table1.f_com_id = '430' AND      
 table1.f_status = 'Submitted' AND table2.f_type = 'InProcess'

【讨论】:

【参考方案3】:

1.更改WHERE子句前的INNER JOIN。 2. 你有两个不允许的 WHERE。

试试这个:

从表 1 中选择表 1.f_id 内连接表2 开(table2.f_id = table1.f_id AND table2.f_type = 'InProcess') WHERE table1.f_com_id = '430' AND table1.f_status = '提交'

【讨论】:

奇怪的是,括号解决了我的问题【参考方案4】:

您使用了两个WHERE 子句,但只允许使用一个。像这样使用它:

SELECT table1.f_id FROM table1
INNER JOIN table2 ON table2.f_id = table1.f_id
WHERE
  table1.f_com_id = '430'
  AND table1.f_status = 'Submitted'
  AND table2.f_type = 'InProcess'

【讨论】:

以上是关于带有 WHERE 子句的 MySql 内部连接 ​​[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

内部连接的慢 where 子句

如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]

内部连接的 SQL where 子句

如何使用带有 PySpark 的 WHERE 子句在 AWS Glue 中查询 JDBC 数据库?

带有两个不同 where 子句的内/左连接

MySQL 不使用带有 WHERE IN 子句的索引?