如何处理在 php mysql 中返回多个值的内部查询?

Posted

技术标签:

【中文标题】如何处理在 php mysql 中返回多个值的内部查询?【英文标题】:How to handle an inner query returning multiple values in php mysql? 【发布时间】:2013-06-16 16:51:53 【问题描述】:

如何处理php mysql中返回多个值的内部查询?

例如。

SELECT value1 FROM table1 WHERE value1 != (SELECT value1 FROM table2 WHERE .....)

问题是(SELECT value1 FROM table2 WHERE .....) 正在返回多个值。

如何解决?

请帮帮我....

【问题讨论】:

【参考方案1】:

假设您想使用子查询来限制外部查询的结果集,您可以使用 INEXISTS 来做到这一点

SELECT value1 
  FROM table1 
 WHERE value1 NOT IN 
(
  SELECT value1 
    FROM table2
   WHERE value1 IS NOT NULL ...
)

小心NOT IN 如果子查询返回NULLs,您将不会得到预期的结果(空结果集)。确保子查询不返回NULLs(使用适当的WHERE 子句或使用COALESCEIFNULLNULLS 替换为某个值)或使用NOT EXISTS

SELECT value1
  FROM table1 t
 WHERE NOT EXISTS
(
  SELECT 1 
    FROM table2 
   WHERE value1 = t.value1 ...
)

这里是 SQLFiddle 演示。 请注意,演示中的第一个查询不会返回任何行。

另一方面如果你只需要你的子查询返回唯一的值

1) 使用LIMIT 1 已建议 2) 或适当的聚合函数(MIN(), MAX(), AVG() 等)

SELECT value1 
  FROM table1 
 WHERE value1 <> 
(
  SELECT MAX(value1)
    FROM table2
   WHERE ...
)

【讨论】:

【参考方案2】:

将“limit 1”放在内部查询的末尾。这将告诉查询引擎只返回第一个结果。

但如果您想要将您的值与子查询中的多个结果进行比较,请使用 peterm 的解决方案。

【讨论】:

【参考方案3】:
SELECT value1
FROM table1
WHERE value1 != (
    SELECT value1 FROM table2 WHERE ... LIMIT 1
)

但请确保子查询准确返回您需要的内容。因为由于它返回多个值而不是一个,所以您可能对逻辑有一些误解。

另外,如果你需要 value1 不等于多个参数而不是一个,你可以使用NOT IN

SELECT value1
FROM table1
WHERE value1 NOT IN (
    SELECT value1 FROM table2 WHERE ...
)

【讨论】:

以上是关于如何处理在 php mysql 中返回多个值的内部查询?的主要内容,如果未能解决你的问题,请参考以下文章

在 Grafana 中,我们如何处理在图表/面板中返回 0 行的查询?

如何处理在域模型中没有表示的查询?

GraphQL:如何处理在自己的类型定义中引用类型?

Android/Parse-如何处理来自 ParseQuery 的多个回调

Node.js:如何处理在字典中查找同名的不同城市?

如何处理在源代码中找不到 OpenCV