0

カウントを含む列を作成しようとしていますが、これを行うサブクエリを再利用しようとすると、以前に作成された一時テーブルが存在しなくなったため、使用できなくなります。

私の質問は、前のサブクエリの結果を保存して、後で同じクエリでその結果に対して何かを実行できるようにするにはどうすればよいですか?

まず、私が持っているカウントについて:

CREATE TEMPORARY TABLE _temp_unique_entity_manufacturers 
            (
              entityId INT(11),
              manufacturerRef INT(11),
              manufacturerName VARCHAR(255),
              KEY(entityId),
              KEY(manufacturerRef)
            )
            ENGINE=MEMORY AS 
              (SELECT DISTINCT entityRef AS entityId, manufacturer AS manufacturerRef, pm.name AS manufacturerName FROM enquiries, parts_trading, parts_manufacturers AS pm WHERE manufacturer = pm.id AND enquiryRef = enquiries.id)

そして、メインのクエリで、このテーブル、具体的には次の部分を操作します。

IF((SELECT COUNT(*) FROM _temp_unique_entity_manufacturers WHERE entityId = eo.id) > 0,
   (SELECT COUNT(*) FROM _temp_unique_entity_manufacturers WHERE entityId = eo.id),
   0
) AS manufacturers

この時点で一時テーブルがなくなるため、2 番目のサブクエリは失敗します。同じサブクエリを何度も書き出す必要がない方法はありますか?

4

1 に答える 1

0
        case when
         ((SELECT COUNT(*) FROM _temp_unique_entity_manufacturers WHERE entityId = eo.id) > 0) then
           (SELECT COUNT(*) FROM _temp_unique_entity_manufacturers WHERE entityId = eo.id) else
           0 end
        ) AS manufacturers
    --------------
    ex:
    select coname,(case when cond then result else second result end) as user_colname from
    tablename
----------------------
If condition implement in sql as case when statement
于 2012-10-11T10:06:18.890 に答える