【问题标题】:How to handle an inner query returning multiple values in php mysql?如何处理在 php mysql 中返回多个值的内部查询?
【发布时间】:2013-06-16 16:51:53
【问题描述】:

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

例如。

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

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

如何解决?

请帮帮我....

【问题讨论】:

    标签: php mysql sql mysqli


    【解决方案1】:

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

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

    小心NOT IN 如果子查询返回NULLs,您将不会得到预期的结果(空结果集)。确保子查询不返回NULLs(使用适当的WHERE 子句或使用COALESCEIFNULLNULLS 替换为某个值)或使用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 ...
        )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-18
          • 2019-11-14
          • 2012-02-27
          • 1970-01-01
          • 1970-01-01
          • 2013-07-15
          相关资源
          最近更新 更多