2016-07-12 14 views
1

特定の複合/ネストされた条件が満たされているテーブルのすべてのレコードを選択するクエリを作成しようとしています。私の思う質問のロジックは正しいと思いますが、私が実行している問題は最後のサブクエリー(例を参照)が1行以上を返していることです。これは私が期待する/必要とするものです。だから問題は、どうやってこれに対処するのだろうか? MySQLは何らかのループや設定基準をサポートしていますか?MySQL対処方法:サブクエリは1行以上を返しますか?

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

リターンより行、その後..あなたは...

c.primary_key not in (

または

ではない使用することができ、私は正しくunderstan場合

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') 
); 

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

ありがとうございます! 'NOT IN'がトリックをしました! –

+0

@JimFellありがとう.. – scaisEdge

関連する問題