1

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

例如。

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

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

如何解决这个问题?

请帮我....

4

3 回答 3

2

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

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

于 2013-06-16T16:54:03.553 回答
2

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

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

小心NOT IN如果子查询返回NULLs 你不会得到预期的结果(一个空的结果集)。确保子查询不返回NULLs (使用适当的WHERE子句或使用 or 替换为NULLS某个值)或使用COALESCEIFNULLNOT 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 ...
)
于 2013-06-16T16:55:16.400 回答
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 ...
)
于 2013-06-16T16:55:58.167 回答