如何处理在 php mysql 中返回多个值的内部查询?
例如。
SELECT value1 FROM table1 WHERE value1 != (SELECT value1 FROM table2 WHERE .....)
问题是(SELECT value1 FROM table2 WHERE .....)
返回多个值。
如何解决这个问题?
请帮我....
将“limit 1”放在内部查询的末尾。这将告诉查询引擎只返回第一个结果。
但是,如果您想将您的值与子查询中的多个结果进行比较,请使用 peterm 的解决方案。
假设您想使用子查询来限制外部查询的结果集,您可以使用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
子句或使用 or 替换为NULLS
某个值)或使用COALESCE
IFNULL
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 ...
)
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 ...
)