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

时间:2013-06-16 16:51:53

标签: php mysql sql mysqli

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

例如。

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

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

如何解决这个问题?

请帮助我....

3 个答案:

答案 0 :(得分:2)

Put"限制1"在内部查询的末尾。这将告诉查询引擎只返回第一个结果。

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

答案 1 :(得分:2)

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

来执行此操作
SELECT value1 
  FROM table1 
 WHERE value1 NOT IN 
(
  SELECT value1 
    FROM table2
   WHERE value1 IS NOT NULL ...
)

小心NOT IN 如果子查询返回NULL,则无法获得预期结果(空结果集)。确保子查询不返回NULL s(使用适当的WHERE子句或使用NULLSCOALESCE替换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 ...
)