【问题标题】:SQL SELECT QuestionSQL 选择问题
【发布时间】:2011-09-13 09:31:37
【问题描述】:

我正在尝试执行一个SQL 查询,该查询分为两部分。

首先,我有一个返回 10 个 ID 列表的查询。 但是我想有一个SELECT 语句,它对这10 个id 中的每一个都有一个WHERE 子句。

这可能吗?

我试过了:

    SELECT * FROM tablenameWHERE id= (SELECT id FROM table_of_ids WHERE 
    tableid='1a177de1-3f25c9b7910b' OR 
    tableid='64faecca-133af807a65a' OR
... up to 10 Ids)

但它返回一个错误,说明子查询返回多于 1 行。

注意,table_of_ids的tableid和id列是不同的值。

有谁知道如何做到这一点? 我自己好像也不知所措了。

如果重要的话,我正在使用 mySQL 和 PHP。

干杯, 布雷特

【问题讨论】:

    标签: php mysql sql mysql-error-1242


    【解决方案1】:

    使用 IN 关键字。

    SELECT * FROM user WHERE Id IN(SELECT userId FROM table).
    

    Id 是第一个表的主键,userId 是 coz 第二个表的外键。

    【讨论】:

      【解决方案2】:

      不要使用“=”运算符,使用“IN”运算符。 有关示例,请参阅此 tutorial

      【讨论】:

        【解决方案3】:

        看起来你可以;

        SELECT * 
        FROM tablename
          INNER JOIN table_of_ids ON table_of_ids.id = tablename.id
        WHERE table_of_ids.tableid IN (
          '1a177de1-3f25c9b7910b',
          '64faecca-133af807a65a',
        ... )
        

        【讨论】:

          【解决方案4】:

          改成in()

          WHERE id IN (SELECT id ...)
          

          【讨论】:

            【解决方案5】:

            不是一个非常优化的查询,但您可以使用 IN 代替 =

             SELECT * FROM tablename WHERE id IN (SELECT id FROM table_of_ids WHERE 
                tableid='1a177de1-3f25c9b7910b' OR 
                tableid='64faecca-133af807a65a' OR
            ... up to 10 Ids)
            

            【讨论】:

            • 你建议如何优化它?
            【解决方案6】:

            = 替换为IN 关键字。

            select * from sometable where key in (subselect that returns one column)
            

            【讨论】:

              猜你喜欢
              • 2021-11-29
              • 2012-06-17
              • 1970-01-01
              • 1970-01-01
              • 2015-09-27
              • 2015-03-29
              • 2020-08-07
              • 1970-01-01
              相关资源
              最近更新 更多