如何处理在php mysql中返回多个值的内部查询?
例如。
SELECT value1 FROM table1 WHERE value1 != (SELECT value1 FROM table2 WHERE .....)
问题是(SELECT value1 FROM table2 WHERE .....)
正在返回多个值。
如何解决这个问题?
请帮助我....
答案 0 :(得分:2)
Put"限制1"在内部查询的末尾。这将告诉查询引擎只返回第一个结果。
但是,如果您想要将您的值与子查询中的多个结果进行比较,请使用peterm的解决方案。
答案 1 :(得分:2)
假设您要使用子查询来限制外部查询的结果集,您可以使用IN
或EXISTS
SELECT value1
FROM table1
WHERE value1 NOT IN
(
SELECT value1
FROM table2
WHERE value1 IS NOT NULL ...
)
小心NOT IN
如果子查询返回NULL
,则无法获得预期结果(空结果集)。确保子查询不返回NULL
s(使用适当的WHERE
子句或使用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 ...
)
答案 2 :(得分:2)
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 ...
)