MySQL如何处理错误:子查询返回超过1行?

时间:2016-07-12 18:16:27

标签: mysql select subquery where

我尝试编写一个查询,从中选择满足某些复杂/嵌套条件的表中的所有记录。我认为我的查询中的逻辑是正确的,但我遇到的问题是最终的子查询(参见示例)返回的行超过1行,这是我期望/需要的。所以,问题是,我该如何处理? MySQL是否支持某种循环或设置标准?

SELECT c.primary_key
FROM esjp_content c
WHERE template_id = (
    SELECT DISTINCT esjp_content.template_id
    FROM esjp_content
    INNER JOIN esjp_hw_config ON esjp_content.template_id = esjp_hw_config.proc_id
    INNER JOIN esjp_assets ON esjp_hw_config.primary_key = esjp_assets.hw_config_id
    WHERE
        esjp_content.summary_id > 0
            AND
        (esjp_assets.asset_label='C001498500' OR esjp_assets.asset_label='H0065' OR esjp_assets.asset_label='L0009')
    )
        AND
    EXISTS (SELECT 1 FROM esjp_content c2 WHERE c2.summary_id = c.primary_key)
        AND
    c.primary_key != (
        /* This subquery returns more than 1 result. */
        SELECT esjp_signoffs.content_id
        FROM esjp_signoffs
        INNER JOIN esjp_assets ON esjp_signoffs.asset_id = esjp_assets.primary_key
        WHERE
            esjp_signoffs.user_id=1
                AND
            (esjp_assets.asset_label='C001498500' OR esjp_assets.asset_label='H0065' OR esjp_assets.asset_label='L0009')
    );

有关我的表的其他详细信息,请参阅我今天早些时候制作的other StackOverflow post。 (这是一个完全不同的问题。)

1 个答案:

答案 0 :(得分:1)

如果我正确地理解了

   c.primary_key != (
    /* This subquery returns more than 1 result. */
    SELECT esjp_signoffs.content_id
    FROM esjp_signoffs
    INNER JOIN esjp_assets ON esjp_signoffs.asset_id = esjp_assets.primary_key
    WHERE
        esjp_signoffs.user_id=1
            AND
        (esjp_assets.asset_label='C001498500' OR esjp_assets.asset_label='H0065' OR esjp_assets.asset_label='L0009')
);

返回更多行..你可以不用..

  c.primary_key not in (

 inner join  (  ..... ) t on c.primary_key != t.the_column_you_need