【问题标题】:"... Where field ON (SELECT ..)" does not work with "select" in a working where clause“... Where field ON (SELECT ..)” 不适用于工作 where 子句中的“select”
【发布时间】:2019-02-25 18:32:01
【问题描述】:

我需要运行一个查询来查看 3 个链接表的内容:

表 a = 我们必须提取的数据的容器

表b = 父表,其中包含表a和c相关的id

表 c = 包含要满足的条件的数据的表

然后:b-> b.id-> 在 a.bid 和 b.bid 上

我试着做出这样的选择:

SELECT field_a
FROM a
WHERE field_b IN (SELECT b.id FROM b INNER JOIN c ON b.id = 1 WHERE c.aid = 1)

查询:

(SELECT b.id FROM b INNER JOIN c ON b.id = 1 WHERE c.aid = 1)

返回这个结果:

Array ([0] => Array ([id] => 1))

因为我无法执行

"SELECT field_a FROM a WHERE field_b IN (SELECT ...)"

如果我尝试这样做

"SELECT field_a FROM a WHERE field_b IN (1)"

查询有效,但我需要先用 select 提取它

【问题讨论】:

  • 请在此处显示示例表数据,以及您期望的输出。
  • 出了什么问题?错误信息?空结果集?结果集不正确?请edit澄清您的问题。
  • @O.Jones 只有空数组。

标签: mysql select pdo inner-join


【解决方案1】:

这应该等同于您的查询:

SELECT field_a
FROM a
WHERE EXISTS(SELECT 1 FROM b
             JOIN c ON b.id = 1
             WHERE a.field_b = b.id
               AND c.aid = 1)

但是这个查询:

SELECT 1 FROM b
JOIN c ON b.id = 1
WHERE a.field_b = b.id
 AND c.aid = 1

SELECT b.id FROM b INNER JOIN c ON b.id = 1 WHERE c.aid = 1

正如你所写,是错误的。虽然它运行并给出了正确的结果,但 ON 子句不正确 - 它与 JOIN 无关。您可能想在这里使用另一个EXISTS,但我非常不确定您想在那里实现什么...

【讨论】:

  • 它有效,但我有一个问题:你怎么知道与哪个领域相关?您是否在自动检查我在数据库中创建的关系?我在问你为什么我们没有指定它应该属于哪个字段,我觉得很奇怪,查询成功只是使用 EXISTS (...)
  • @Question 我什至没有仔细阅读你的关系,我只是看到你是如何检查你的状况的——这是常见的问题。每当您使用INNOT IN 时,我建议您改用EXISTS。阅读它,你会和我一样了解:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多