如何处理在 php mysql 中返回多个值的内部查询?
Posted
技术标签:
【中文标题】如何处理在 php mysql 中返回多个值的内部查询?【英文标题】:How to handle an inner query returning multiple values in php mysql? 【发布时间】:2013-06-16 16:51:53 【问题描述】:例如。
SELECT value1 FROM table1 WHERE value1 != (SELECT value1 FROM table2 WHERE .....)
问题是(SELECT value1 FROM table2 WHERE .....)
正在返回多个值。
如何解决?
请帮帮我....
【问题讨论】:
【参考方案1】:假设您想使用子查询来限制外部查询的结果集,您可以使用 IN
或 EXISTS
来做到这一点
SELECT value1
FROM table1
WHERE value1 NOT IN
(
SELECT value1
FROM table2
WHERE value1 IS NOT NULL ...
)
小心NOT IN
如果子查询返回NULL
s,您将不会得到预期的结果(空结果集)。确保子查询不返回NULL
s(使用适当的WHERE
子句或使用COALESCE
或IFNULL
将NULLS
替换为某个值)或使用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 行的查询?